diff --git a/Network/Socket.hsc b/Network/Socket.hsc
--- a/Network/Socket.hsc
+++ b/Network/Socket.hsc
@@ -233,6 +233,10 @@
 import System.IO.Unsafe	(unsafePerformIO)
 #endif
 
+# if __GLASGOW_HASKELL__ >= 611
+import GHC.IO.FD
+#endif
+
 import Network.Socket.Internal
 
 type HostName       = String
@@ -297,6 +301,12 @@
 
 INSTANCE_TYPEABLE0(Socket,socketTc,"Socket")
 
+#if __GLASGOW_HASKELL__ >= 611
+socket2FD  (MkSocket fd _ _ _ _) = 
+  -- HACK, 1 means True 
+  FD{fdFD = fd,fdIsSocket_ = 1} 
+#endif
+
 mkSocket :: CInt
 	 -> Family
 	 -> SocketType
@@ -729,13 +739,28 @@
 send :: Socket	-- Bound/Connected Socket
      -> String	-- Data to send
      -> IO Int	-- Number of Bytes sent
-send (MkSocket s _family _stype _protocol status) xs = do
+send sock@(MkSocket s _family _stype _protocol status) xs = do
  let len = length xs
  withCString xs $ \str -> do
    liftM fromIntegral $
 #if defined(__GLASGOW_HASKELL__) && defined(mingw32_HOST_OS)
-      writeRawBufferPtr "Network.Socket.send" (fromIntegral s) True str 0
-		(fromIntegral len)
+# if __GLASGOW_HASKELL__ >= 611    
+    writeRawBufferPtr 
+      "Network.Socket.send" 
+      (socket2FD sock)
+      (castPtr str)
+      0
+      (fromIntegral len)
+#else      
+      writeRawBufferPtr 
+        "Network.Socket.send" 
+        (fromIntegral s) 
+        True 
+        str 
+        0 
+       (fromIntegral len)
+#endif    
+    
 #else
 # if !defined(__HUGS__)
      throwSocketErrorIfMinus1RetryMayBlock "send"
@@ -754,8 +779,13 @@
      allocaBytes nbytes $ \ptr -> do
         len <- 
 #if defined(__GLASGOW_HASKELL__) && defined(mingw32_HOST_OS)
-	  readRawBufferPtr "Network.Socket.recvLen" (fromIntegral s) True ptr 0
-		 (fromIntegral nbytes)
+# if __GLASGOW_HASKELL__ >= 611    
+          readRawBufferPtr "Network.Socket.recvLen" (socket2FD sock) ptr 0
+                 (fromIntegral nbytes)
+#else          
+          readRawBufferPtr "Network.Socket.recvLen" (fromIntegral s) True ptr 0
+                 (fromIntegral nbytes)
+#endif
 #else
 # if !defined(__HUGS__)
 	       throwSocketErrorIfMinus1RetryMayBlock "recv"
@@ -767,7 +797,7 @@
 	if len' == 0
 	 then ioError (mkEOFError "Network.Socket.recv")
 	 else do
-	   s <- peekCStringLen (ptr,len')
+	   s <- peekCStringLen (castPtr ptr,len')
 	   return (s, len')
 
 -- ---------------------------------------------------------------------------
diff --git a/network.cabal b/network.cabal
--- a/network.cabal
+++ b/network.cabal
@@ -1,5 +1,5 @@
 name:           network
-version:        2.2.1.5
+version:        2.2.1.6
 license:        BSD3
 license-file:   LICENSE
 maintainer:     Johan Tibell <johan.tibell@gmail.com>
