@@ -96,6 +96,7 @@ module Streamly.Internal.Network.Inet.TCP
99+import Control.Exception (onException)
99import Control.Monad.Catch (MonadCatch, MonadMask, bracket)
100import Control.Monad.Catch (MonadCatch, MonadMask, bracket)
100import Control.Monad.IO.Class (MonadIO(..))
101import Control.Monad.IO.Class (MonadIO(..))
101import Data.Word (Word8)
102import Data.Word (Word8)
@@ -244,13 +245,15 @@ connectionsOnLocalHost = connectionsOnAddr (127,0,0,1)
244-- TCP Clients
245-- TCP Clients
245-------------------------------------------------------------------------------
246-------------------------------------------------------------------------------
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.
249-- @since 0.7.0
251-- @since 0.7.0
250connect :: (Word8, Word8, Word8, Word8) -> PortNumber -> IO Socket
252connect :: (Word8, Word8, Word8, Word8) -> PortNumber -> IO Socket
251connect addr port = do
253connect addr port = do
252 sock <- socket AF_INET Stream defaultProtocol
254 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
254 return sock
257 return sock
256-- | Connect to a remote host using IP address and port and run the supplied
259-- | Connect to a remote host using IP address and port and run the supplied