packages feed

network-run 0.2.4 → 0.2.5

raw patch · 3 files changed

+25/−4 lines, 3 files

Files

CHANGELOG.md view
@@ -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)
Network/Run/TCP.hs view
@@ -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
network-run.cabal view
@@ -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: