diff --git a/Data/Streaming/Network.hs b/Data/Streaming/Network.hs
--- a/Data/Streaming/Network.hs
+++ b/Data/Streaming/Network.hs
@@ -33,6 +33,7 @@
       -- ** Setters
     , setPort
     , setHost
+    , setAddrFamily
     , setAfterBind
     , setNeedLocalAddr
 #if !WINDOWS
@@ -41,6 +42,7 @@
       -- ** Getters
     , getPort
     , getHost
+    , getAddrFamily
     , getAfterBind
     , getNeedLocalAddr
 #if !WINDOWS
@@ -55,6 +57,7 @@
     , bindPortGen
     , bindRandomPortGen
     , getSocketGen
+    , getSocketFamilyGen
     , acceptSafe
     , unassignedPorts
     , getUnassignedPort
@@ -62,6 +65,7 @@
     , bindPortTCP
     , bindRandomPortTCP
     , getSocketTCP
+    , getSocketFamilyTCP
     , safeRecv
     , runTCPServer
     , runTCPClient
@@ -103,18 +107,25 @@
 import Control.Concurrent.MVar (putMVar, takeMVar, newEmptyMVar)
 #endif
 
--- | Attempt to connect to the given host/port using given @SocketType@.
-getSocketGen :: SocketType -> String -> Int -> IO (Socket, AddrInfo)
-getSocketGen sockettype host' port' = do
+-- | Attempt to connect to the given host/port/address family using given @SocketType@.
+--
+-- Since 0.1.3
+getSocketFamilyGen :: SocketType -> String -> Int -> NS.Family -> IO (Socket, AddrInfo)
+getSocketFamilyGen sockettype host' port' af = do
     let hints = NS.defaultHints {
                           NS.addrFlags = [NS.AI_ADDRCONFIG]
                         , NS.addrSocketType = sockettype
+                        , NS.addrFamily = af
                         }
     (addr:_) <- NS.getAddrInfo (Just hints) (Just host') (Just $ show port')
     sock <- NS.socket (NS.addrFamily addr) (NS.addrSocketType addr)
                       (NS.addrProtocol addr)
     return (sock, addr)
 
+-- | Attempt to connect to the given host/port using given @SocketType@.
+getSocketGen :: SocketType -> String -> Int -> IO (Socket, AddrInfo)
+getSocketGen sockettype host port = getSocketFamilyGen sockettype host port NS.AF_UNSPEC
+
 -- | Attempt to bind a listening @Socket@ on the given host/port using given
 -- @SocketType@. If no host is given, will use the first address available.
 bindPortGen :: SocketType -> Int -> HostPreference -> IO Socket
@@ -358,12 +369,15 @@
 clientSettingsTCP port host = ClientSettings
     { clientPort = port
     , clientHost = host
+    , clientAddrFamily = NS.AF_UNSPEC
     }
 
--- | Attempt to connect to the given host/port.
-getSocketTCP :: ByteString -> Int -> IO (NS.Socket, NS.SockAddr)
-getSocketTCP host' port' = do
-    (sock, addr) <- getSocketGen NS.Stream (S8.unpack host') port'
+-- | Attempt to connect to the given host/port/address family.
+--
+-- Since 0.1.3
+getSocketFamilyTCP :: ByteString -> Int -> NS.Family -> IO (NS.Socket, NS.SockAddr)
+getSocketFamilyTCP host' port' addrFamily = do
+    (sock, addr) <- getSocketFamilyGen NS.Stream (S8.unpack host') port' addrFamily
     ee <- try' $ NS.connect sock (NS.addrAddress addr)
     case ee of
         Left e -> NS.sClose sock >> throwIO e
@@ -372,6 +386,10 @@
     try' :: IO a -> IO (Either SomeException a)
     try' = try
 
+-- | Attempt to connect to the given host/port.
+getSocketTCP :: ByteString -> Int -> IO (NS.Socket, NS.SockAddr)
+getSocketTCP host port = getSocketFamilyTCP host port NS.AF_UNSPEC
+
 -- | Attempt to bind a listening @Socket@ on the given host/port. If no host is
 -- given, will use the first address available.
 -- 'maxListenQueue' is topically 128 which is too short for
@@ -442,6 +460,18 @@
 getHost :: ClientSettings -> ByteString
 getHost = clientHost
 
+-- | Set the address family for the given settings.
+--
+-- Since 0.1.3
+setAddrFamily :: NS.Family -> ClientSettings -> ClientSettings
+setAddrFamily af cs = cs { clientAddrFamily = af }
+
+-- | Get the address family for the given settings.
+--
+-- Since 0.1.3
+getAddrFamily :: ClientSettings -> NS.Family
+getAddrFamily = clientAddrFamily
+
 #if !WINDOWS
 class HasPath a where
     pathLens :: Functor f => (FilePath -> f FilePath) -> a -> f a
@@ -518,8 +548,8 @@
 
 -- | Run an @Application@ by connecting to the specified server.
 runTCPClient :: ClientSettings -> (AppData -> IO a) -> IO a
-runTCPClient (ClientSettings port host) app = E.bracket
-    (getSocketTCP host port)
+runTCPClient (ClientSettings port host addrFamily) app = E.bracket
+    (getSocketFamilyTCP host port addrFamily)
     (NS.sClose . fst)
     (\(s, address) -> app AppData
         { appRead' = safeRecv s 4096
diff --git a/Data/Streaming/Network/Internal.hs b/Data/Streaming/Network/Internal.hs
--- a/Data/Streaming/Network/Internal.hs
+++ b/Data/Streaming/Network/Internal.hs
@@ -14,7 +14,7 @@
 
 import Data.String (IsString (..))
 import Data.ByteString (ByteString)
-import Network.Socket (Socket, SockAddr)
+import Network.Socket (Socket, SockAddr, Family)
 
 -- | Settings for a TCP server. It takes a port to listen on, and an optional
 -- hostname to bind to.
@@ -30,6 +30,7 @@
 data ClientSettings = ClientSettings
     { clientPort :: !Int
     , clientHost :: !ByteString
+    , clientAddrFamily :: !Family
     }
 
 -- | Which host to bind.
diff --git a/streaming-commons.cabal b/streaming-commons.cabal
--- a/streaming-commons.cabal
+++ b/streaming-commons.cabal
@@ -1,5 +1,5 @@
 name:                streaming-commons
-version:             0.1.2.4
+version:             0.1.3
 synopsis:            Common lower-level functions needed by various streaming data libraries
 description:         Provides low-dependency functionality commonly needed by various streaming data libraries, such as conduit and pipes.
 homepage:            https://github.com/fpco/streaming-commons
