diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for warp-quic
 
-## 0.0.0.0
+## 0.0.1
+
+* Providing `runQUICSocket`.
+
+## 0.0.0
 
 * First version. Released on an unsuspecting world.
diff --git a/Network/Wai/Handler/WarpQUIC.hs b/Network/Wai/Handler/WarpQUIC.hs
--- a/Network/Wai/Handler/WarpQUIC.hs
+++ b/Network/Wai/Handler/WarpQUIC.hs
@@ -8,34 +8,50 @@
 import qualified Network.HTTP3.Server as H3
 import Network.QUIC
 import Network.QUIC.Server as Q
+import Network.Socket (Socket)
 import Network.TLS (cipherID)
 import Network.Wai
 import Network.Wai.Handler.Warp hiding (run)
-import Network.Wai.Handler.Warp.Internal
+import Network.Wai.Handler.Warp.Internal hiding (Connection)
 
 -- | QUIC server settings.
 type QUICSettings = ServerConfig
 
+runQUICSocket :: QUICSettings -> Settings -> Socket -> Application -> IO ()
+runQUICSocket quicsettings settings sock app =
+    withII settings $ \ii ->
+        Q.runWithSockets [sock] quicsettings $ quicApp settings app ii
+
 -- | Running warp with HTTP/3 on QUIC.
 runQUIC :: QUICSettings -> Settings -> Application -> IO ()
-runQUIC quicsettings settings app = do
+runQUIC quicsettings settings app =
     withII settings $ \ii ->
-        Q.run quicsettings $ \conn -> do
-           info <- getConnectionInfo conn
-           mccc <- clientCertificateChain conn
-           let addr = remoteSockAddr info
-               malpn = alpn info
-               transport = QUIC {
-                   quicNegotiatedProtocol = malpn
-                 , quicChiperID = cipherID $ cipher info
-                 , quicClientCertificate = mccc
-                 }
-               pread = pReadMaker ii
-               timmgr = timeoutManager ii
-               conf = H3.Config H3.defaultHooks pread timmgr
-           case malpn of
-             Nothing -> return ()
-             Just appProto -> do
-                 let runX | "h3" `BS.isPrefixOf` appProto = H3.run
-                          | otherwise                     = HQ.run
-                 runX conn conf $ http2server settings ii transport addr app
+        Q.run quicsettings $ quicApp settings app ii
+
+quicApp
+    :: Settings
+    -> Application
+    -> InternalInfo
+    -> Connection
+    -> IO ()
+quicApp settings app ii conn = do
+    info <- getConnectionInfo conn
+    mccc <- clientCertificateChain conn
+    let addr = remoteSockAddr info
+        malpn = alpn info
+        transport =
+            QUIC
+                { quicNegotiatedProtocol = malpn
+                , quicChiperID = cipherID $ cipher info
+                , quicClientCertificate = mccc
+                }
+        pread = pReadMaker ii
+        timmgr = timeoutManager ii
+        conf = H3.Config H3.defaultHooks pread timmgr
+    case malpn of
+        Nothing -> return ()
+        Just appProto -> do
+            let runX
+                    | "h3" `BS.isPrefixOf` appProto = H3.run
+                    | otherwise = HQ.run
+            runX conn conf $ http2server settings ii transport addr app
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,3 @@
 import Distribution.Simple
+
 main = defaultMain
diff --git a/warp-quic.cabal b/warp-quic.cabal
--- a/warp-quic.cabal
+++ b/warp-quic.cabal
@@ -1,27 +1,30 @@
-name:                warp-quic
-version:             0.0.0
-author:              Kazu Yamamoto <kazu@iij.ad.jp>
-maintainer:          Kazu Yamamoto <kazu@iij.ad.jp>
-license:             BSD3
-license-file:        LICENSE
-synopsis:            Warp based on QUIC
-description:         WAI handler for HTTP/3 based on QUIC
-homepage:            https://github.com/kazu-yamamoto/warp-quic
-category:            Network
-cabal-version:       >=1.10
-build-type:          Simple
-extra-source-files:  ChangeLog.md
+cabal-version:      >=1.10
+name:               warp-quic
+version:            0.0.1
+license:            BSD3
+license-file:       LICENSE
+maintainer:         Kazu Yamamoto <kazu@iij.ad.jp>
+author:             Kazu Yamamoto <kazu@iij.ad.jp>
+homepage:           https://github.com/yesodweb/wai
+synopsis:           Warp based on QUIC
+description:        WAI handler for HTTP/3 based on QUIC
+category:           Network
+build-type:         Simple
+extra-source-files: ChangeLog.md
 
 library
-  default-language:    Haskell2010
-  ghc-options:         -Wall
-  exposed-modules:     Network.Wai.Handler.WarpQUIC
-  build-depends:       base >= 4.13 && < 5
-                     , bytestring
-                     , http3
-                     , quic
-                     , tls
-                     , wai
-                     , warp >= 3.3.15
-  if impl(ghc >= 8)
-      default-extensions:  Strict StrictData
+    exposed-modules:  Network.Wai.Handler.WarpQUIC
+    default-language: Haskell2010
+    ghc-options:      -Wall
+    build-depends:
+        base >=4.13 && <5,
+        bytestring,
+        http3,
+        network,
+        quic >=0.2 && <0.3,
+        tls >=1.7,
+        wai,
+        warp >=3.3.15
+
+    if impl(ghc >=8)
+        default-extensions: Strict StrictData
