@@ -96,6 +96,7 @@ module Streamly.Internal.Network.Inet.TCP
9696 )
9797where
9898
99+import Control.Exception (onException)
99100import Control.Monad.Catch (MonadCatch, MonadMask, bracket)
100101import Control.Monad.IO.Class (MonadIO(..))
101102import Data.Word (Word8)
@@ -244,13 +245,15 @@ connectionsOnLocalHost = connectionsOnAddr (127,0,0,1)
244245-- TCP Clients
245246-------------------------------------------------------------------------------
246247
247−-- | Connect to the specified IP address and port number.
248+-- | Connect to the specified IP address and port number. Returns a connected
249+-- socket or throws an exception.
248250--
249251-- @since 0.7.0
250252connect :: (Word8, Word8, Word8, Word8) -> PortNumber -> IO Socket
251253connect addr port = do
252254 sock <- socket AF_INET Stream defaultProtocol
253− Net.connect sock $ SockAddrInet port (Net.tupleToHostAddress addr)
255+ (Net.connect sock $ SockAddrInet port (Net.tupleToHostAddress addr))
256+ `onException` Net.close sock
254257 return sock
255258
256259-- | Connect to a remote host using IP address and port and run the supplied