Skip to content

Commit 152aea0

Browse files
committed
making getAddrInfo polymorphic
1 parent 8c18f94 commit 152aea0

File tree

6 files changed

+23
-11
lines changed

6 files changed

+23
-11
lines changed

Network/Socket.hs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
-- > addrFlags = [AI_PASSIVE]
5858
-- > , addrSocketType = Stream
5959
-- > }
60-
-- > NE.head <$> getAddrInfoNE (Just hints) mhost (Just port)
60+
-- > NE.head <$> getAddrInfo (Just hints) mhost (Just port)
6161
-- > open addr = E.bracketOnError (openSocket addr) close $ \sock -> do
6262
-- > setSocketOption sock ReuseAddr 1
6363
-- > withFdSocket sock setCloseOnExecIfNeeded
@@ -97,7 +97,7 @@
9797
-- > where
9898
-- > resolve = do
9999
-- > let hints = defaultHints { addrSocketType = Stream }
100-
-- > NE.head <$> getAddrInfoNE (Just hints) (Just host) (Just port)
100+
-- > NE.head <$> getAddrInfo (Just hints) (Just host) (Just port)
101101
-- > open addr = E.bracketOnError (openSocket addr) close $ \sock -> do
102102
-- > connect sock $ addrAddress addr
103103
-- > return sock
@@ -112,8 +112,7 @@ module Network.Socket (
112112
withSocketsDo,
113113

114114
-- * Address information
115-
getAddrInfo,
116-
getAddrInfoNE,
115+
GetAddrInfo (..),
117116

118117
-- ** Types
119118
HostName,

Network/Socket/Info.hsc

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,19 @@ defaultHints = AddrInfo {
201201
, addrCanonName = Nothing
202202
}
203203

204+
class GetAddrInfo t where
205+
getAddrInfo
206+
:: Maybe AddrInfo -- ^ preferred socket type or protocol
207+
-> Maybe HostName -- ^ host name to look up
208+
-> Maybe ServiceName -- ^ service name to look up
209+
-> IO (t AddrInfo) -- ^ resolved addresses, with "best" first
210+
211+
instance GetAddrInfo [] where
212+
getAddrInfo = getAddrInfoList
213+
214+
instance GetAddrInfo NE.NonEmpty where
215+
getAddrInfo = getAddrInfoNE
216+
204217
-----------------------------------------------------------------------------
205218
-- | Resolve a host or service name to one or more addresses.
206219
-- The 'AddrInfo' values that this function returns contain 'SockAddr'
@@ -242,12 +255,12 @@ defaultHints = AddrInfo {
242255
-- >>> addrAddress addr
243256
-- 127.0.0.1:80
244257

245-
getAddrInfo
258+
getAddrInfoList
246259
:: Maybe AddrInfo -- ^ preferred socket type or protocol
247260
-> Maybe HostName -- ^ host name to look up
248261
-> Maybe ServiceName -- ^ service name to look up
249262
-> IO [AddrInfo] -- ^ resolved addresses, with "best" first
250-
getAddrInfo hints node service = alloc getaddrinfo
263+
getAddrInfoList hints node service = alloc getaddrinfo
251264
where
252265
alloc body = withSocketsDo $ maybeWith withCString node $ \c_node ->
253266
maybeWith withCString service $ \c_service ->

examples/EchoClient.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ runTCPClient host port client = withSocketsDo $ do
2424
where
2525
resolve = do
2626
let hints = defaultHints{addrSocketType = Stream}
27-
NE.head <$> getAddrInfoNE (Just hints) (Just host) (Just port)
27+
NE.head <$> getAddrInfo (Just hints) (Just host) (Just port)
2828
open addr = E.bracketOnError (openSocket addr) close $ \sock -> do
2929
connect sock $ addrAddress addr
3030
return sock

examples/EchoServer.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ runTCPServer mhost port server = withSocketsDo $ do
3030
{ addrFlags = [AI_PASSIVE]
3131
, addrSocketType = Stream
3232
}
33-
NE.head <$> getAddrInfoNE (Just hints) mhost (Just port)
33+
NE.head <$> getAddrInfo (Just hints) mhost (Just port)
3434
open addr = E.bracketOnError (openSocket addr) close $ \sock -> do
3535
setSocketOption sock ReuseAddr 1
3636
withFdSocket sock setCloseOnExecIfNeeded

tests/Network/SocketSpec.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ spec = do
118118

119119
it "does not cause segfault on macOS 10.8.2 due to AI_NUMERICSERV" $ do
120120
let hints = defaultHints { addrFlags = [AI_NUMERICSERV] }
121-
void $ getAddrInfo (Just hints) (Just "localhost") Nothing
121+
void (getAddrInfo (Just hints) (Just "localhost") Nothing :: IO [AddrInfo])
122122

123123
#if defined(mingw32_HOST_OS)
124124
let lpdevname = "loopback_0"

tests/Network/Test/Common.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ bracketWithReraise tid setup teardown thing =
245245

246246
resolveClient :: SocketType -> HostName -> PortNumber -> IO AddrInfo
247247
resolveClient socketType host port =
248-
NE.head <$> getAddrInfoNE (Just hints) (Just host) (Just $ show port)
248+
NE.head <$> getAddrInfo (Just hints) (Just host) (Just $ show port)
249249
where
250250
hints = defaultHints {
251251
addrSocketType = socketType
@@ -254,7 +254,7 @@ resolveClient socketType host port =
254254

255255
resolveServer :: SocketType -> HostName -> IO AddrInfo
256256
resolveServer socketType host =
257-
NE.head <$> getAddrInfoNE (Just hints) (Just host) Nothing
257+
NE.head <$> getAddrInfo (Just hints) (Just host) Nothing
258258
where
259259
hints = defaultHints {
260260
addrSocketType = socketType

0 commit comments

Comments
 (0)