network-run 0.2.7 → 0.2.8
raw patch · 6 files changed
+28/−12 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Network.Run.TCP.Timeout: openClientSocket :: AddrInfo -> IO Socket
Files
- CHANGELOG.md +4/−0
- Network/Run/Core.hs +15/−3
- Network/Run/TCP.hs +3/−5
- Network/Run/TCP/Timeout.hs +3/−1
- Network/Run/UDP.hs +2/−2
- network-run.cabal +1/−1
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for network-run +## 0.2.8++* runTCPClient specifies AI_ADDRCONFIG.+ ## 0.2.7 * Introduce `runTCPServerWithSocket`
Network/Run/Core.hs view
@@ -4,6 +4,7 @@ module Network.Run.Core ( resolve, openSocket,+ openClientSocket, openServerSocket, gclose, ) where@@ -11,20 +12,31 @@ import qualified Control.Exception as E import Network.Socket -resolve :: SocketType -> Maybe HostName -> ServiceName -> Bool -> IO AddrInfo-resolve socketType mhost port passive =+resolve+ :: SocketType+ -> Maybe HostName+ -> ServiceName+ -> [AddrInfoFlag]+ -> IO AddrInfo+resolve socketType mhost port flags = head <$> getAddrInfo (Just hints) mhost (Just port) where hints = defaultHints { addrSocketType = socketType- , addrFlags = if passive then [AI_PASSIVE] else []+ , addrFlags = flags } #if !MIN_VERSION_network(3,1,2) openSocket :: AddrInfo -> IO Socket openSocket addr = socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr) #endif++openClientSocket :: AddrInfo -> IO Socket+openClientSocket ai = do+ sock <- openSocket ai+ connect sock $ addrAddress ai+ return sock -- | Open socket for server use --
Network/Run/TCP.hs view
@@ -20,12 +20,10 @@ -- | Running a TCP client with a connected socket. runTCPClient :: HostName -> ServiceName -> (Socket -> IO a) -> IO a runTCPClient host port client = withSocketsDo $ do- addr <- resolve Stream (Just host) port False+ addr <- resolve Stream (Just host) port [AI_ADDRCONFIG] E.bracket (open addr) gclose client where- open addr = E.bracketOnError (openSocket addr) close $ \sock -> do- connect sock $ addrAddress addr- return sock+ open addr = E.bracketOnError (openClientSocket addr) close return -- | Running a TCP server with an accepted socket and its peer name. runTCPServer :: Maybe HostName -> ServiceName -> (Socket -> IO a) -> IO a@@ -48,7 +46,7 @@ -- ^ Called for each incoming connection, in a new thread -> IO a runTCPServerWithSocket initSocket mhost port server = withSocketsDo $ do- addr <- resolve Stream mhost port True+ addr <- resolve Stream mhost port [AI_PASSIVE] E.bracket (open addr) close loop where open addr = E.bracketOnError (initSocket addr) close $ \sock -> do
Network/Run/TCP/Timeout.hs view
@@ -4,8 +4,10 @@ module Network.Run.TCP.Timeout ( runTCPServer, TimeoutServer,+ -- * Generalized API runTCPServerWithSocket,+ openClientSocket, openServerSocket, ) where @@ -53,7 +55,7 @@ -> IO a runTCPServerWithSocket initSocket tm mhost port server = withSocketsDo $ do T.withManager (tm * 1000000) $ \mgr -> do- addr <- resolve Stream mhost port True+ addr <- resolve Stream mhost port [AI_PASSIVE] E.bracket (open addr) close $ loop mgr where open addr = E.bracketOnError (initSocket addr) close $ \sock -> do
Network/Run/UDP.hs view
@@ -20,14 +20,14 @@ -- They should be used with 'sendTo'. runUDPClient :: HostName -> ServiceName -> (Socket -> SockAddr -> IO a) -> IO a runUDPClient host port client = withSocketsDo $ do- addr <- resolve Datagram (Just host) port False+ addr <- resolve Datagram (Just host) port [AI_ADDRCONFIG] let sockAddr = addrAddress addr E.bracket (openSocket addr) close $ \sock -> client sock sockAddr -- | Running a UDP server with an open socket in a single Haskell thread. runUDPServer :: Maybe HostName -> ServiceName -> (Socket -> IO a) -> IO a runUDPServer mhost port server = withSocketsDo $ do- addr <- resolve Datagram mhost port True+ addr <- resolve Datagram mhost port [AI_PASSIVE] E.bracket (openServerSocket addr) close server -- | Running a UDP server with a connected socket in each Haskell thread.
network-run.cabal view
@@ -1,5 +1,5 @@ name: network-run-version: 0.2.7+version: 0.2.8 synopsis: Simple network runner library description: Simple functions to run network clients and servers. -- bug-reports: