diff --git a/Network/HTTP2/TLS/Client.hs b/Network/HTTP2/TLS/Client.hs
--- a/Network/HTTP2/TLS/Client.hs
+++ b/Network/HTTP2/TLS/Client.hs
@@ -33,6 +33,9 @@
     settingsConnectionWindowSize,
     settingsStreamWindowSize,
     settingsServerNameOverride,
+    settingsSessionManager,
+    settingsWantSessionResume,
+    settingsUseEarlyData,
 ) where
 
 import Data.ByteString (ByteString)
@@ -231,11 +234,12 @@
     -- <https://datatracker.ietf.org/doc/html/rfc4366#section-3.1>
     (defaultParamsClient serverName (BS.C8.pack $ show port))
         { clientSupported = supported
-        , clientWantSessionResume = Nothing
+        , clientWantSessionResume = settingsWantSessionResume
         , clientUseServerNameIndication = True
         , clientShared = shared
         , clientHooks = hooks
         , clientDebug = debug
+        , clientUseEarlyData = settingsUseEarlyData
         }
   where
     shared =
diff --git a/Network/HTTP2/TLS/Client/Settings.hs b/Network/HTTP2/TLS/Client/Settings.hs
--- a/Network/HTTP2/TLS/Client/Settings.hs
+++ b/Network/HTTP2/TLS/Client/Settings.hs
@@ -8,7 +8,7 @@
     cacheLimit,
     defaultClientConfig,
  )
-import Network.TLS (SessionManager, noSessionManager)
+import Network.TLS (SessionData, SessionID, SessionManager, noSessionManager)
 
 -- Client settings type.
 data Settings = Settings
@@ -59,6 +59,16 @@
     -- 1048575
     , settingsSessionManager :: SessionManager
     -- ^ TLS session manager (H2 and TLS)
+    , settingsWantSessionResume :: Maybe (SessionID, SessionData)
+    -- ^ Try to resume a TLS session (H2 and TLS)
+    --
+    -- >>> settingsWantSessionResume defaultSettings
+    -- Nothing
+    , settingsUseEarlyData :: Bool
+    -- ^ Try to use 0-RTT (H2 and TLS)
+    --
+    -- >>> settingsUseEarlyData defaultSettings
+    -- False
     }
 
 -- | Default settings.
@@ -75,4 +85,6 @@
         , settingsStreamWindowSize = defaultMaxStreamData
         , settingsConnectionWindowSize = defaultMaxData
         , settingsSessionManager = noSessionManager
+        , settingsWantSessionResume = Nothing
+        , settingsUseEarlyData = False
         }
diff --git a/Network/HTTP2/TLS/Server.hs b/Network/HTTP2/TLS/Server.hs
--- a/Network/HTTP2/TLS/Server.hs
+++ b/Network/HTTP2/TLS/Server.hs
@@ -24,6 +24,7 @@
     settingsConnectionWindowSize,
     settingsStreamWindowSize,
     settingsSessionManager,
+    settingsOpenServerSocket,
 
     -- * IO backend
     IOBackend,
@@ -81,7 +82,11 @@
     -> (T.Manager -> IOBackend -> IO a)
     -> IO a
 runTLS settings creds host port alpn action =
-    runTCPServer (settingsTimeout settings) (Just host) (show port) $ \mgr th sock -> do
+    runTCPServerWithSocket
+        (settingsOpenServerSocket settings)
+        (settingsTimeout settings)
+        (Just host)
+        (show port) $ \mgr th sock -> do
         backend <- mkBackend settings sock
         E.bracket (contextNew backend params) bye $ \ctx -> do
             handshake ctx
@@ -99,7 +104,11 @@
 -- | Running an HTTP\/2 client over TCP.
 runH2C :: Settings -> HostName -> PortNumber -> Server -> IO ()
 runH2C settings@Settings{..} host port server =
-    runTCPServer settingsTimeout (Just host) (show port) $ \mgr th sock -> do
+    runTCPServerWithSocket
+        settingsOpenServerSocket
+        settingsTimeout
+        (Just host)
+        (show port) $ \mgr th sock -> do
         iobackend0 <- tcpIOBackend settings sock
         let iobackend = timeoutIOBackend th settings iobackend0
         run' settings server mgr iobackend
@@ -155,7 +164,11 @@
 runIOH2C
     :: Settings -> HostName -> PortNumber -> (ServerIO -> IO (IO ())) -> IO ()
 runIOH2C settings0@Settings{..} host port action =
-    runTCPServer settingsTimeout (Just host) (show port) $ \mgr th sock -> do
+    runTCPServerWithSocket
+        settingsOpenServerSocket
+        settingsTimeout
+        (Just host)
+        (show port) $ \mgr th sock -> do
         iobackend0 <- tcpIOBackend settings0 sock
         let iobackend = timeoutIOBackend th settings0 iobackend0
         runIO' settings0 action mgr iobackend
diff --git a/Network/HTTP2/TLS/Server/Settings.hs b/Network/HTTP2/TLS/Server/Settings.hs
--- a/Network/HTTP2/TLS/Server/Settings.hs
+++ b/Network/HTTP2/TLS/Server/Settings.hs
@@ -5,6 +5,8 @@
     defaultServerConfig,
     numberOfWorkers,
  )
+import Network.Run.TCP.Timeout
+import Network.Socket
 import Network.TLS (SessionManager, noSessionManager)
 
 -- Server settings type.
@@ -62,6 +64,10 @@
     -- 1048575
     , settingsSessionManager :: SessionManager
     -- ^ TLS session manager (H2 and TLS)
+    , settingsOpenServerSocket :: AddrInfo -> IO Socket
+    -- ^ Function to initialize the server socket
+    --
+    -- Defaults to 'openServerSocket'
     }
 
 -- | Default settings.
@@ -79,4 +85,5 @@
         , settingsStreamWindowSize = defaultMaxStreamData
         , settingsConnectionWindowSize = defaultMaxData
         , settingsSessionManager = noSessionManager
+        , settingsOpenServerSocket = openServerSocket
         }
diff --git a/http2-tls.cabal b/http2-tls.cabal
--- a/http2-tls.cabal
+++ b/http2-tls.cabal
@@ -1,6 +1,6 @@
 cabal-version: >=1.10
 name:          http2-tls
-version:       0.2.5
+version:       0.2.6
 license:       BSD3
 license-file:  LICENSE
 maintainer:    Kazu Yamamoto <kazu@iij.ad.jp>
@@ -36,10 +36,10 @@
     ghc-options:        -Wall
     build-depends:
         base >=4.9 && <5,
-        bytestring >= 0.10 && < 0.12,
+        bytestring >= 0.10 && < 0.13,
         http2 >=5.1 && < 5.2,
         data-default-class >= 0.1 && < 0.2,
-        network >= 3.1.4 && < 3.2,
+        network >= 3.1.4,
         time-manager >= 0.0.1 && < 0.1,
         unliftio >= 0.2 && < 0.3,
         network-run >= 0.2.6 && < 0.3,
