diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,9 @@
 # Changelog for Hedis
 
+## 0.11.0
+
+* PR #126. Fixes for network 2.8 and 3.0
+
 ## 0.10.10
 
 * Only disable warnings for GHC 8.6, fix build
diff --git a/hedis.cabal b/hedis.cabal
--- a/hedis.cabal
+++ b/hedis.cabal
@@ -1,5 +1,5 @@
 name:               hedis
-version:            0.10.10
+version:            0.11.0
 synopsis:
     Client library for the Redis datastore: supports full command set,
     pipelining.
diff --git a/src/Database/Redis.hs b/src/Database/Redis.hs
--- a/src/Database/Redis.hs
+++ b/src/Database/Redis.hs
@@ -164,7 +164,7 @@
     -- * Connection
     Connection, ConnectError(..), connect, checkedConnect, disconnect, 
     ConnectInfo(..), defaultConnectInfo, parseConnectInfo,
-    HostName, PortID(..),
+    HostName, PortNumber,
     
     -- * Commands
     module Database.Redis.Commands,
@@ -195,7 +195,7 @@
 import Database.Redis.PubSub
 import Database.Redis.Protocol
 import Database.Redis.ProtocolPipelining
-    (HostName, PortID(..), ConnectionLostException(..))
+    (HostName, PortNumber, ConnectionLostException(..))
 import Database.Redis.Transactions
 import Database.Redis.Types
 import Database.Redis.URL
diff --git a/src/Database/Redis/Core.hs b/src/Database/Redis/Core.hs
--- a/src/Database/Redis/Core.hs
+++ b/src/Database/Redis/Core.hs
@@ -23,7 +23,7 @@
 import Data.Pool
 import Data.Time
 import Data.Typeable
-import Network
+import qualified Network.Socket as NS
 import Network.TLS (ClientParams)
 
 import Database.Redis.Protocol
@@ -155,8 +155,8 @@
 -- @
 --
 data ConnectInfo = ConnInfo
-    { connectHost           :: HostName
-    , connectPort           :: PortID
+    { connectHost           :: NS.HostName
+    , connectPort           :: NS.PortNumber
     , connectAuth           :: Maybe B.ByteString
     -- ^ When the server is protected by a password, set 'connectAuth' to 'Just'
     --   the password. Each connection will then authenticate by the 'auth'
@@ -201,7 +201,7 @@
 defaultConnectInfo :: ConnectInfo
 defaultConnectInfo = ConnInfo
     { connectHost           = "localhost"
-    , connectPort           = PortNumber 6379
+    , connectPort           = 6379
     , connectAuth           = Nothing
     , connectDatabase       = 0
     , connectMaxConnections = 50
diff --git a/src/Database/Redis/ProtocolPipelining.hs b/src/Database/Redis/ProtocolPipelining.hs
--- a/src/Database/Redis/ProtocolPipelining.hs
+++ b/src/Database/Redis/ProtocolPipelining.hs
@@ -17,7 +17,7 @@
   Connection,
   connect, enableTLS, beginReceiving, disconnect, request, send, recv, flush,
   ConnectionLostException(..),
-  HostName, PortID(..)
+  HostName, PortNumber
 ) where
 
 import           Prelude
@@ -31,8 +31,6 @@
 import qualified Data.ByteString.Lazy as L
 import           Data.IORef
 import           Data.Typeable
-import           Network
-import qualified Network.BSD as BSD
 import qualified Network.Socket as NS
 import qualified Network.TLS as TLS
 import           System.IO
@@ -41,6 +39,9 @@
 
 import           Database.Redis.Protocol
 
+type HostName = NS.HostName
+type PortNumber = NS.PortNumber
+
 data ConnectionContext = NormalHandle Handle | TLSContext TLS.Context
 
 data Connection = Conn
@@ -71,8 +72,30 @@
 
 instance Exception ConnectTimeout
 
-connect :: HostName -> PortID -> Maybe Int -> IO Connection
-connect hostName portID timeoutOpt =
+getHostAddrInfo :: NS.HostName -> NS.PortNumber -> IO [NS.AddrInfo]
+getHostAddrInfo hostname port = do
+  addresses <- NS.getAddrInfo
+    (Just NS.defaultHints)
+    (Just hostname)
+    (Just (show port))
+  return addresses
+
+connectSocket :: [NS.AddrInfo] -> IO NS.Socket
+connectSocket addresses = do
+  let addrInfo = head addresses
+  socket <- NS.socket (NS.addrFamily addrInfo) NS.Stream NS.defaultProtocol
+  catch
+    (do
+      _ <- NS.connect socket (NS.addrAddress addrInfo)
+      return socket)
+    (\(SomeException e) -> do
+      _ <- NS.close socket
+      case (tail addresses) of
+        [] -> throwIO e
+        others -> connectSocket others)
+
+connect :: NS.HostName -> NS.PortNumber -> Maybe Int -> IO Connection
+connect hostName portNumber timeoutOpt =
   bracketOnError hConnect hClose $ \h -> do
     hSetBinaryMode h True
     connReplies <- newIORef []
@@ -83,7 +106,7 @@
   where
         hConnect = do
           phaseMVar <- newMVar PhaseUnknown
-          let doConnect = hConnect' portID phaseMVar
+          let doConnect = hConnect' phaseMVar
           case timeoutOpt of
             Nothing -> doConnect
             Just micros -> do
@@ -93,16 +116,14 @@
                 Right () -> do
                   phase <- readMVar phaseMVar
                   errConnectTimeout phase
-        hConnect' (PortNumber port) mvar =
-          bracketOnError mkSocket NS.close $ \sock -> do
+        hConnect' mvar =
+          do
+            addrInfo <- getHostAddrInfo hostName portNumber
+            sock <- connectSocket addrInfo
             NS.setSocketOption sock NS.KeepAlive 1
             void $ swapMVar mvar PhaseResolve
-            host <- BSD.getHostByName hostName
             void $ swapMVar mvar PhaseOpenSocket
-            NS.connect sock $ NS.SockAddrInet port (BSD.hostAddress host)
             NS.socketToHandle sock ReadWriteMode
-        hConnect' _ _ = connectTo hostName portID
-        mkSocket   = NS.socket NS.AF_INET NS.Stream 0
 
 enableTLS :: TLS.ClientParams -> Connection -> IO Connection
 enableTLS tlsParams conn@Conn{..} = do
diff --git a/src/Database/Redis/URL.hs b/src/Database/Redis/URL.hs
--- a/src/Database/Redis/URL.hs
+++ b/src/Database/Redis/URL.hs
@@ -10,7 +10,6 @@
 import Control.Monad (guard)
 import Data.Monoid ((<>))
 import Database.Redis.Core (ConnectInfo(..), defaultConnectInfo)
-import Database.Redis.ProtocolPipelining (PortID(..))
 import Network.HTTP.Base
 import Network.URI (parseURI, uriPath, uriScheme)
 import Text.Read (readMaybe)
@@ -22,7 +21,7 @@
 -- Username is ignored, path is used to specify the database:
 --
 -- >>> parseConnectInfo "redis://username:password@host:42/2"
--- Right (ConnInfo {connectHost = "host", connectPort = PortNumber 42, connectAuth = Just "password", connectDatabase = 2, connectMaxConnections = 50, connectMaxIdleTime = 30s, connectTimeout = Nothing, connectTLSParams = Nothing})
+-- Right (ConnInfo {connectHost = "host", connectPort = 42, connectAuth = Just "password", connectDatabase = 2, connectMaxConnections = 50, connectMaxIdleTime = 30s, connectTimeout = Nothing, connectTLSParams = Nothing})
 --
 -- >>> parseConnectInfo "redis://username:password@host:42/db"
 -- Left "Invalid port: db"
@@ -36,7 +35,7 @@
 -- @'defaultConnectInfo'@:
 --
 -- >>> parseConnectInfo "redis://"
--- Right (ConnInfo {connectHost = "localhost", connectPort = PortNumber 6379, connectAuth = Nothing, connectDatabase = 0, connectMaxConnections = 50, connectMaxIdleTime = 30s, connectTimeout = Nothing, connectTLSParams = Nothing})
+-- Right (ConnInfo {connectHost = "localhost", connectPort = 6379, connectAuth = Nothing, connectDatabase = 0, connectMaxConnections = 50, connectMaxIdleTime = 30s, connectTimeout = Nothing, connectTLSParams = Nothing})
 --
 parseConnectInfo :: String -> Either String ConnectInfo
 parseConnectInfo url = do
@@ -57,8 +56,7 @@
         { connectHost = if null h
             then connectHost defaultConnectInfo
             else h
-        , connectPort = maybe (connectPort defaultConnectInfo)
-            (PortNumber . fromIntegral) $ port uriAuth
+        , connectPort = maybe (connectPort defaultConnectInfo) fromIntegral (port uriAuth)
         , connectAuth = C8.pack <$> password uriAuth
         , connectDatabase = db
         }
