on master help sign in
close socket on exception (in connect)
d0b558eHarendra Kumar
src/Streamly/Internal/Network/Inet/TCP.hs+5−2
@@ -96,6 +96,7 @@ module Streamly.Internal.Network.Inet.TCP
96 )
96 )
97where
97where
98
98
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-------------------------------------------------------------------------------
246
247
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.
248--
250--
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
255
258
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