diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,6 +1,10 @@
 # ChangeLog
 
-## 0.2.15
+## 0.2.17
+
+* Using waitReadSocketSTM properly.
+
+## 0.2.16
 
 * Fixing build on Windows.
   [#80](https://github.com/kazu-yamamoto/quic/pull/80)
diff --git a/Network/QUIC/Server/Reader.hs b/Network/QUIC/Server/Reader.hs
--- a/Network/QUIC/Server/Reader.hs
+++ b/Network/QUIC/Server/Reader.hs
@@ -147,15 +147,20 @@
 
 data ServerState = Running | Stopped deriving (Eq, Show)
 
-checkLoop :: TVar ServerState -> STM () -> IO Bool
-checkLoop stvar waitsock = atomically $ do
-    st <- readTVar stvar
-    if st == Stopped
-        then
-            return False
+checkLoop :: TVar ServerState -> Socket -> IO Bool
+checkLoop stvar mysock = do
+    st0 <- readTVarIO stvar
+    if st0 == Stopped
+        then return False
         else do
-            waitsock -- blocking is retry
-            return True
+            wait <- waitReadSocketSTM mysock
+            atomically $ do
+                st <- readTVar stvar
+                if st == Stopped
+                    then return False
+                    else do
+                        wait -- blocking is retry
+                        return True
 
 dispatcher
     :: Dispatch
@@ -166,11 +171,10 @@
     -> IO ()
 dispatcher d conf stvar forkConnection mysock = do
     labelMe "QUIC dispatcher"
-    wait <- waitReadSocketSTM mysock
-    handleLogUnit logAction $ loop wait
+    handleLogUnit logAction loop
   where
-    loop wait = do
-        cont <- checkLoop stvar wait
+    loop = do
+        cont <- checkLoop stvar mysock
         when cont $ do
             (bs, peersa) <- safeRecv $ NSB.recvFrom mysock 2048
             now <- getTimeMicrosecond
@@ -181,7 +185,7 @@
             let bytes = BS.length bs
                 switch = dispatch d conf forkConnection logAction mysock peersa send' bytes now
             mapM_ switch cpckts
-            loop wait
+            loop
 
     doDebug = isJust $ scDebugLog conf
     logAction 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.2.16
+version:            0.2.17
 license:            BSD3
 license-file:       LICENSE
 maintainer:         kazu@iij.ad.jp
