From 17287b5556a7b0f0d072df6aafcdc050af7ab330 Mon Sep 17 00:00:00 2001 From: Scott Fleischman Date: Thu, 30 May 2019 10:02:06 -0700 Subject: [PATCH] Use network's connectTo when available. --- Database/MongoDB/Internal/Network.hs | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/Database/MongoDB/Internal/Network.hs b/Database/MongoDB/Internal/Network.hs index cd249a3..9d6f146 100644 --- a/Database/MongoDB/Internal/Network.hs +++ b/Database/MongoDB/Internal/Network.hs @@ -3,19 +3,38 @@ module Database.MongoDB.Internal.Network (PortID(..), N.HostName, connectTo) where -import Control.Exception (bracketOnError) -import Network.BSD as BSD -import System.IO (Handle, IOMode(ReadWriteMode)) #if !MIN_VERSION_network(2, 8, 0) + import qualified Network as N +import System.IO (Handle) + #else + +import Control.Exception (bracketOnError) +import Network.BSD as BSD import qualified Network.Socket as N +import System.IO (Handle, IOMode(ReadWriteMode)) + #endif + +-- | Wraps network's 'PortNumber' +-- Used to easy compatibility between older and newer network versions. newtype PortID = PortNumber N.PortNumber deriving (Show, Eq, Ord) --- Taken from network 2.8's connectTo + +#if !MIN_VERSION_network(2, 8, 0) + +-- Unwrap our newtype and use network's PortID and connectTo +connectTo :: N.HostName -- Hostname + -> PortID -- Port Identifier + -> IO Handle -- Connected Socket +connectTo hostname (PortNumber port) = N.connectTo hostname (N.PortNumber port) + +#else + +-- Copied implementation from network 2.8's 'connectTo', but using our 'PortID' newtype. -- https://github.com/haskell/network/blob/e73f0b96c9da924fe83f3c73488f7e69f712755f/Network.hs#L120-L129 connectTo :: N.HostName -- Hostname -> PortID -- Port Identifier @@ -30,3 +49,4 @@ connectTo hostname (PortNumber port) = do N.connect sock (N.SockAddrInet port (hostAddress he)) N.socketToHandle sock ReadWriteMode ) +#endif