diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for hookup
 
+## 0.6
+
+* Include SockAddr in connection exceptions
+
 ## 0.5
 
 * Don't use `AI_ADDRCONFIG` flag
diff --git a/hookup.cabal b/hookup.cabal
--- a/hookup.cabal
+++ b/hookup.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                hookup
-version:             0.5
+version:             0.6
 synopsis:            Abstraction over creating network connections with SOCKS5 and TLS
 description:         This package provides an abstraction for communicating with line-oriented
                      network services while abstracting over the use of SOCKS5 and TLS (via OpenSSL)
@@ -37,7 +37,7 @@
     cbits/pem_password_cb.c
 
   build-depends:
-    base                  >=4.11 && <4.15,
+    base                  >=4.11 && <4.16,
     async                 ^>=2.2,
     stm                   ^>=2.5,
     network               >=3.0  && <3.2,
diff --git a/src/Hookup.hs b/src/Hookup.hs
--- a/src/Hookup.hs
+++ b/src/Hookup.hs
@@ -73,7 +73,7 @@
 import qualified Data.ByteString.Char8 as B8
 import           Data.Foldable
 import           Data.List (intercalate, partition)
-import           Data.Maybe (fromMaybe)
+import           Data.Maybe (fromMaybe, mapMaybe)
 import           Foreign.C.String (withCStringLen)
 import           Foreign.Ptr (nullPtr)
 import           Network.Socket (AddrInfo, HostName, PortNumber, SockAddr, Socket, Family)
@@ -136,7 +136,7 @@
   -- | Failure during 'getAddrInfo' resolving remote host
   = HostnameResolutionFailure HostName String
   -- | Failure during 'connect' to remote host
-  | ConnectionFailure [IOError]
+  | ConnectionFailure [ConnectError]
   -- | Failure during 'recvLine'
   | LineTooLong
   -- | Incomplete line during 'recvLine'
@@ -180,6 +180,12 @@
       AddrNotSupported  -> "address type not supported"
       CommandReply n    -> "unknown reply " ++ show n
 
+data ConnectError = ConnectError SockAddr IOError
+  deriving Show
+
+instance Exception ConnectError where
+  displayException (ConnectError addr e) = show addr ++ ": " ++ displayException e
+
 -- | Default values for TLS that use no client certificates, use
 -- system CA root, @\"HIGH\"@ cipher suite, and which validate hostnames.
 defaultTlsParams :: TlsParams
@@ -267,7 +273,7 @@
        (throwIO (HostnameResolutionFailure h "No source/destination address family match"))
      res <- concurrentAttempts connAttemptDelay Socket.close (uncurry connectToAddrInfo <$> pairs)
      case res of
-       Left es -> throwIO (ConnectionFailure [ioe | e <- es, Just ioe <- [fromException e]])
+       Left es -> throwIO (ConnectionFailure (mapMaybe fromException es))
        Right s -> pure s
 
 hints :: AddrInfo
@@ -318,10 +324,12 @@
 -- by the given 'AddrInfo' and return the connected socket.
 connectToAddrInfo :: Maybe SockAddr -> AddrInfo -> IO Socket
 connectToAddrInfo mbSrc info
-  = bracketOnError (socket' info) Socket.close $ \s ->
+  = let addr = Socket.addrAddress info in
+    bracketOnError (socket' info) Socket.close $ \s ->
     do traverse_ (bind' s) mbSrc
-       Socket.connect s (Socket.addrAddress info)
+       Socket.connect s addr
        pure s
+    `catch` (throwIO . ConnectError addr)
 
 -- | A version of 'Socket.bind' that doesn't bother binding on the wildcard
 -- address. The effect of binding on a wildcard address in this library
