on master help sign in
Merge pull request #674 from ondrap/master

Add support for windows thread block hack and closeOnExec to TLS.

commit2cec9999fcd02f8c4f70986632d61526f4e276c8 authorMichael Snoyman <michael@snoyman.com> dateMon 19 Feb 2018, 08:14 (9 years ago) parentc548f5586e2a44
6 files changed+21−2
warp-tls/Network/Wai/Handler/WarpTLS.hs+5 warp-tls/warp-tls.cabal+4−1 warp/Network/Wai/Handler/Warp/Internal.hs+4 warp/Network/Wai/Handler/Warp/Run.hs+4 warp/Network/Wai/Handler/Warp/Windows.hs+3 warp/warp.cabal+1−1
warp-tls/Network/Wai/Handler/WarpTLS.hs+5
@@ -293,7 +293,12 @@ alpn xs
293293
294294getter :: TLS.TLSParams params => TLSSettings -> Socket -> params -> IO (IO (Connection, Transport), SockAddr)
295295getter tlsset@TLSSettings{..} sock params = do
296+#if WINDOWS
297+ (s, sa) <- windowsThreadBlockHack $ accept sock
298+#else
296299 (s, sa) <- accept sock
300+#endif
301+ setSocketCloseOnExec s
297302 return (mkConn tlsset s params, sa)
298303
299304mkConn :: TLS.TLSParams params => TLSSettings -> Socket -> params -> IO (Connection, Transport)
warp-tls/warp-tls.cabal+4−1
@@ -1,5 +1,5 @@
11Name: warp-tls
2−Version: 3.2.4.1
2+Version: 3.2.4.2
33Synopsis: HTTP over TLS support for Warp via the TLS package
44License: MIT
55License-file: LICENSE
@@ -30,6 +30,9 @@ Library
3030 , tls-session-manager >= 0.0.0.1
3131 Exposed-modules: Network.Wai.Handler.WarpTLS
3232 ghc-options: -Wall
33+ if os(windows)
34+ Cpp-Options: -DWINDOWS
35+
3336
3437source-repository head
3538 type: git
warp/Network/Wai/Handler/Warp/Internal.hs+4
@@ -64,6 +64,9 @@ module Network.Wai.Handler.Warp.Internal (
6464 , Source
6565 , recvRequest
6666 , sendResponse
67+ -- * Platform dependent helper functions
68+ , setSocketCloseOnExec
69+ , windowsThreadBlockHack
6770 ) where
6871
6972import Network.Wai.Handler.Warp.Buffer
@@ -79,3 +82,4 @@ import Network.Wai.Handler.Warp.SendFile
7982import Network.Wai.Handler.Warp.Settings
8083import Network.Wai.Handler.Warp.Timeout
8184import Network.Wai.Handler.Warp.Types
85+import Network.Wai.Handler.Warp.Windows
warp/Network/Wai/Handler/Warp/Run.hs+4
@@ -522,7 +522,11 @@ wrappedRecvN th istatus slowlorisSize readN bufsize = do
522522 when (S.length bs >= slowlorisSize || bufsize <= slowlorisSize) $ T.tickle th
523523 return bs
524524
525+-- | Set flag FileCloseOnExec flag on a socket (on Unix)
526+--
525527-- Copied from: https://github.com/mzero/plush/blob/master/src/Plush/Server/Warp.hs
528+--
529+-- @since 3.2.17
526530setSocketCloseOnExec :: Socket -> IO ()
527531#if WINDOWS
528532setSocketCloseOnExec _ = return ()
warp/Network/Wai/Handler/Warp/Windows.hs+3
@@ -10,6 +10,9 @@ import Control.Concurrent
1010
1111import Network.Wai.Handler.Warp.Imports
1212
13+-- | Allow main socket listening thread to be interrupted on Windows platform
14+--
15+-- @since 3.2.17
1316windowsThreadBlockHack :: IO a -> IO a
1417windowsThreadBlockHack act = do
1518 var <- newEmptyMVar :: IO (MVar (Either SomeException a))
warp/warp.cabal+1−1
@@ -1,5 +1,5 @@
11Name: warp
2−Version: 3.2.16
2+Version: 3.2.17
33Synopsis: A fast, light-weight web server for WAI applications.
44License: MIT
55License-file: LICENSE