diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,8 @@
-## [*Unreleased*](https://github.com/frontrowed/faktory_worker_haskell/compare/v1.1.2.2...main)
+## [*Unreleased*](https://github.com/frontrowed/faktory_worker_haskell/compare/v1.1.2.3...main)
 
-None
+## [v1.1.2.3](https://github.com/frontrowed/faktory_worker_haskell/compare/v1.1.2.2...v1.1.2.3)
+
+- Set `KeepAlive` in connections to Faktory ([@jagonalez](https://github.com/freckle/faktory_worker_haskell/pull/86))
 
 ## [v1.1.2.2](https://github.com/frontrowed/faktory_worker_haskell/compare/v1.1.2.1...v1.1.2.2)
 
diff --git a/faktory.cabal b/faktory.cabal
--- a/faktory.cabal
+++ b/faktory.cabal
@@ -1,6 +1,6 @@
 cabal-version:   1.18
 name:            faktory
-version:         1.1.2.2
+version:         1.1.2.3
 license:         MIT
 license-file:    LICENSE
 copyright:       2018 Freckle Education
@@ -67,6 +67,7 @@
         Faktory.Settings
         Faktory.Settings.Queue
         Faktory.Worker
+        Network.Connection.Compat
 
     hs-source-dirs:     library
     other-modules:      Paths_faktory
diff --git a/library/Faktory/Connection.hs b/library/Faktory/Connection.hs
--- a/library/Faktory/Connection.hs
+++ b/library/Faktory/Connection.hs
@@ -11,19 +11,11 @@
 import Control.Applicative ((<|>))
 import Data.Maybe (fromMaybe)
 import Data.Void
-import Network.Connection
+import Network.Connection.Compat
 import Network.Socket (HostName, PortNumber)
 import System.Environment (lookupEnv)
 import Text.Megaparsec
-  ( Parsec
-  , anySingle
-  , errorBundlePretty
-  , manyTill
-  , optional
-  , parse
-  , some
-  , (<?>)
-  )
+  (Parsec, anySingle, errorBundlePretty, manyTill, optional, parse, some, (<?>))
 import Text.Megaparsec.Char (char, digitChar, string, upperChar)
 
 newtype Namespace = Namespace Text
diff --git a/library/Network/Connection/Compat.hs b/library/Network/Connection/Compat.hs
new file mode 100644
--- /dev/null
+++ b/library/Network/Connection/Compat.hs
@@ -0,0 +1,52 @@
+-- | Copy of 'Network.Connection.connectTo' with 'KeepAlive'
+--
+-- <https://hackage.haskell.org/package/connection-0.3.1/docs/src/Network.Connection.html#connectTo>
+--
+module Network.Connection.Compat
+  ( connectTo
+  , module Network.Connection
+  ) where
+
+import Prelude
+
+import Control.Exception (IOException, bracketOnError, throwIO, try)
+import Network.Connection hiding (connectTo)
+import Network.Socket
+import qualified Network.Socket as S
+
+-- brittany --exactprint-only
+
+connectTo :: ConnectionContext -> ConnectionParams -> IO Connection
+connectTo cg cParams =
+  bracketOnError
+    (resolve (connectionHostname cParams) (connectionPort cParams))
+    (close . fst)
+    ( \(h, _) ->
+      connectFromSocket cg h cParams
+    )
+
+resolve :: String -> PortNumber -> IO (Socket, SockAddr)
+resolve host port = do
+    let hints = defaultHints { addrFlags = [AI_ADDRCONFIG], addrSocketType = Stream }
+    addrs <- getAddrInfo (Just hints) (Just host) (Just $ show port)
+    firstSuccessful $ map tryToConnect addrs
+  where
+    tryToConnect addr =
+        bracketOnError
+          (socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr))
+          close
+          (\sock -> do
+            setSocketOption sock KeepAlive 1
+            S.connect sock (addrAddress addr)
+            return (sock, addrAddress addr)
+            )
+    firstSuccessful = go []
+      where
+        go :: [IOException] -> [IO a] -> IO a
+        go []      [] = throwIO $ HostNotResolved host
+        go l@(_:_) [] = throwIO $ HostCannotConnect host l
+        go acc     (act:followingActs) = do
+            er <- try act
+            case er of
+                Left err -> go (err:acc) followingActs
+                Right r  -> return r
