diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,6 @@
 # Revision history for network-run
 
-## 0.0.0
+## 0.2.5
 
-* First version.
+* Making accept breakable on windows
+  [#2](https://github.com/kazu-yamamoto/network-run/pull/2)
diff --git a/Network/Run/TCP.hs b/Network/Run/TCP.hs
--- a/Network/Run/TCP.hs
+++ b/Network/Run/TCP.hs
@@ -11,6 +11,11 @@
 import qualified Control.Exception as E
 import Control.Monad (forever, void)
 import Network.Socket
+#if defined(mingw32_HOST_OS)
+import Control.Concurrent.MVar
+import Control.Concurrent
+import qualified Control.Exception
+#endif
 
 import Network.Run.Core
 
@@ -37,10 +42,25 @@
     open addr = E.bracketOnError (openServerSocket addr) close $ \sock -> do
         listen sock 1024
         return sock
-    loop sock = forever $ E.bracketOnError (accept sock) (close . fst) $
+    loop sock = forever $ E.bracketOnError (windowsThreadBlockHack (accept sock)) (close . fst) $
         \(conn, _peer) ->
 #if MIN_VERSION_network(3,1,1)
           void $ forkFinally (server conn) (const $ gracefulClose conn 5000)
 #else
           void $ forkFinally (server conn) (const $ close conn)
+#endif
+
+
+#if defined(mingw32_HOST_OS)
+windowsThreadBlockHack :: IO a -> IO a
+windowsThreadBlockHack act = do
+    var <- newEmptyMVar :: IO (MVar (Either Control.Exception.SomeException a))
+    void . forkIO $ Control.Exception.try act >>= putMVar var
+    res <- takeMVar var
+    case res of
+      Left  e -> Control.Exception.throwIO e
+      Right r -> return r
+#else
+windowsThreadBlockHack :: IO a -> IO a
+windowsThreadBlockHack = id
 #endif
diff --git a/network-run.cabal b/network-run.cabal
--- a/network-run.cabal
+++ b/network-run.cabal
@@ -1,5 +1,5 @@
 name:                network-run
-version:             0.2.4
+version:             0.2.5
 synopsis:            Simple network runner library
 description:         Simple functions to run network clients and servers.
 -- bug-reports:
