diff --git a/Network/CommSec.hs b/Network/CommSec.hs
--- a/Network/CommSec.hs
+++ b/Network/CommSec.hs
@@ -43,6 +43,7 @@
             = Conn { inCtx        :: MVar InContext
                    , outCtx       :: MVar OutContext
                    , socket       :: Socket
+                   , socketAddr   :: SockAddr -- ^ address of remote
                    }
 
 pMVar :: MVar v -> v -> IO ()
@@ -92,8 +93,10 @@
     allocaBytes pktLen $ \pktPtr -> do
         let ctPtr = pktPtr `plusPtr` sizeTagLen
         pokeBE32 pktPtr (fromIntegral ctLen)
-        modifyMVar_ outCtx $ \oCtx -> encodePtr oCtx ptPtr ctPtr ptLen
-        sendBytesPtr socket pktPtr pktLen
+        modifyMVar_ outCtx $ \oCtx -> do
+            r <- encodePtr oCtx ptPtr ctPtr ptLen
+            sendBytesPtr socket pktPtr pktLen
+            return r
 
 -- |Blocks till it receives a valid message, placing the resulting plaintext
 -- in the provided buffer.  If the incoming message is larger that the
@@ -193,7 +196,7 @@
     Net.setSocketOption sock Net.ReuseAddr 1
     Net.bind sock sockaddr
     Net.listen sock 10
-    socket <- fst `fmap` Net.accept sock
+    (socket,socketAddr) <- Net.accept sock
     Net.setSocketOption socket Net.NoDelay 1
     Net.close sock
     inCtx  <- create iCtx
@@ -204,14 +207,14 @@
 doConnect create s hn p
   | B.length s < 16 = error "Invalid input entropy"
   | otherwise = do
-    sockaddr <- resolve hn p
+    socketAddr <- resolve hn p
     let ent  = expandSecret s 64
         k2   = B.take 32 ent
         k1   = B.drop 32 ent
         iCtx = newInContext k1 Sequential
         oCtx = newOutContext k2
     socket <- Net.socket Net.AF_INET Net.Stream Net.defaultProtocol
-    Net.connect socket sockaddr
+    Net.connect socket socketAddr
     Net.setSocketOption socket Net.NoDelay 1
     Net.setSocketOption socket Net.ReuseAddr 1
     inCtx  <- create iCtx
diff --git a/commsec.cabal b/commsec.cabal
--- a/commsec.cabal
+++ b/commsec.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                commsec
-version:             0.3
+version:             0.3.1
 synopsis:            Provide communications security using symmetric ephemeral keys
 description:         This package provides confidentiallity,
                      integrity and replay detection. Users must
