diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 0.1.4
+
+- Fixing the race of socket closure.
+
 ## 0.1.3
 
 - Supporting `tls` v1.8.0.
diff --git a/Network/QUIC/Closer.hs b/Network/QUIC/Closer.hs
--- a/Network/QUIC/Closer.hs
+++ b/Network/QUIC/Closer.hs
@@ -13,6 +13,7 @@
 import Network.QUIC.Connection
 import Network.QUIC.Connector
 import Network.QUIC.Imports
+import Network.QUIC.Logger
 import Network.QUIC.Packet
 import Network.QUIC.Recovery
 import Network.QUIC.Sender
@@ -45,12 +46,19 @@
     recvBuf <- mallocBytes bufsiz
     siz <- encodeCC conn (SizedBuffer sendBuf bufsiz) frame
     us <- getSocket conn
-    let clos = UDP.close us
+    let clos = do
+            UDP.close us
+            -- This is just in case.
+            -- UDP.close never throw exceptions.
+            getSocket conn >>= UDP.close
         send = UDP.sendBuf us sendBuf siz
         recv = UDP.recvBuf us recvBuf bufsiz
         hook = onCloseCompleted $ connHooks conn
     pto <- getPTO ldcc
-    void $ forkFinally (closer conn pto send recv hook) $ \_ -> do
+    void $ forkFinally (closer conn pto send recv hook) $ \e -> do
+        case e of
+          Left e' ->  connDebugLog conn $ "closure' " <> bhow e'
+          Right _ -> return ()
         free sendBuf
         free recvBuf
         clos
diff --git a/Network/QUIC/Server/Run.hs b/Network/QUIC/Server/Run.hs
--- a/Network/QUIC/Server/Run.hs
+++ b/Network/QUIC/Server/Run.hs
@@ -106,7 +106,6 @@
 #if !defined(mingw32_HOST_OS)
         killReaders conn
 #endif
-        getSocket conn >>= UDP.close
     debugLog conn msg = do
         connDebugLog conn ("runServer: " <> msg)
         qlogDebug conn $ Debug $ toLogStr msg
diff --git a/quic.cabal b/quic.cabal
--- a/quic.cabal
+++ b/quic.cabal
@@ -1,6 +1,6 @@
 cabal-version:      >=1.10
 name:               quic
-version:            0.1.3
+version:            0.1.4
 license:            BSD3
 license-file:       LICENSE
 maintainer:         kazu@iij.ad.jp
