diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for network-run
 
+## 0.2.8
+
+* runTCPClient specifies AI_ADDRCONFIG.
+
 ## 0.2.7
 
 * Introduce `runTCPServerWithSocket`
diff --git a/Network/Run/Core.hs b/Network/Run/Core.hs
--- a/Network/Run/Core.hs
+++ b/Network/Run/Core.hs
@@ -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
 --
diff --git a/Network/Run/TCP.hs b/Network/Run/TCP.hs
--- a/Network/Run/TCP.hs
+++ b/Network/Run/TCP.hs
@@ -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
diff --git a/Network/Run/TCP/Timeout.hs b/Network/Run/TCP/Timeout.hs
--- a/Network/Run/TCP/Timeout.hs
+++ b/Network/Run/TCP/Timeout.hs
@@ -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
diff --git a/Network/Run/UDP.hs b/Network/Run/UDP.hs
--- a/Network/Run/UDP.hs
+++ b/Network/Run/UDP.hs
@@ -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.
diff --git a/network-run.cabal b/network-run.cabal
--- a/network-run.cabal
+++ b/network-run.cabal
@@ -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:
