diff --git a/moesocks.cabal b/moesocks.cabal
--- a/moesocks.cabal
+++ b/moesocks.cabal
@@ -1,6 +1,6 @@
 name:               moesocks
 category:           Network
-version:            1.0.0.43
+version:            1.0.0.44
 license:            Apache-2.0
 synopsis:           A functional firewall killer
 description:        A SOCKS5 proxy using the client / server architecture.
diff --git a/src/Network/MoeSocks/Common.hs b/src/Network/MoeSocks/Common.hs
--- a/src/Network/MoeSocks/Common.hs
+++ b/src/Network/MoeSocks/Common.hs
@@ -102,6 +102,8 @@
 setSocketConfig:: Env -> Socket -> IO ()
 setSocketConfig aEnv aSocket = do
   setSocketOption aSocket NoDelay 1
+  -- keepalive
+  setSocketOption aSocket KeepAlive 1
   when (aEnv ^. socketOption_TCP_NOTSENT_LOWAT) - do
     tryIO "setSocket_TCP_NOTSENT_LOWAT" - setSocket_TCP_NOTSENT_LOWAT aSocket
     pure ()
diff --git a/src/Network/MoeSocks/Handler.hs b/src/Network/MoeSocks/Handler.hs
--- a/src/Network/MoeSocks/Handler.hs
+++ b/src/Network/MoeSocks/Handler.hs
@@ -54,7 +54,7 @@
         let handleLocal _socket = do
               _s@(_newSocket, _newSockAddr) <- accept _socket
               setSocketCloseOnExec _newSocket
-              setSocketConfig _env _socket
+              setSocketConfig _env _newSocket
 
               forkIO - catchExceptAsyncLog "LT" -
                         logSA "L TCP client socket" (pure _s) -
@@ -140,7 +140,7 @@
     let handleRemote _socket = do
           (_newSocket, _) <- accept _socket
           setSocketCloseOnExec _newSocket
-          setSocketConfig _env _socket
+          setSocketConfig _env _newSocket
 
           forkIO - catchExceptAsyncLog "RT" -
                       logSocket "R remote socket" (pure _newSocket) -
