on master help sign in
Merge pull request #674 from ondrap/master
2cec999Michael Snoyman
warp-tls/Network/Wai/Handler/WarpTLS.hs+5
@@ -293,7 +293,12 @@ alpn xs
293
293
294getter :: TLS.TLSParams params => TLSSettings -> Socket -> params -> IO (IO (Connection, Transport), SockAddr)
294getter :: TLS.TLSParams params => TLSSettings -> Socket -> params -> IO (IO (Connection, Transport), SockAddr)
295getter tlsset@TLSSettings{..} sock params = do
295getter tlsset@TLSSettings{..} sock params = do
296+#if WINDOWS
297+ (s, sa) <- windowsThreadBlockHack $ accept sock
298+#else
296 (s, sa) <- accept sock
299 (s, sa) <- accept sock
300+#endif
301+ setSocketCloseOnExec s
297 return (mkConn tlsset s params, sa)
302 return (mkConn tlsset s params, sa)
298
303
299mkConn :: TLS.TLSParams params => TLSSettings -> Socket -> params -> IO (Connection, Transport)
304mkConn :: TLS.TLSParams params => TLSSettings -> Socket -> params -> IO (Connection, Transport)
warp-tls/warp-tls.cabal+4−1
@@ -1,5 +1,5 @@
1Name: warp-tls
1Name: warp-tls
2−Version: 3.2.4.1
2+Version: 3.2.4.2
3Synopsis: HTTP over TLS support for Warp via the TLS package
3Synopsis: HTTP over TLS support for Warp via the TLS package
4License: MIT
4License: MIT
5License-file: LICENSE
5License-file: LICENSE
@@ -30,6 +30,9 @@ Library
30 , tls-session-manager >= 0.0.0.1
30 , tls-session-manager >= 0.0.0.1
31 Exposed-modules: Network.Wai.Handler.WarpTLS
31 Exposed-modules: Network.Wai.Handler.WarpTLS
32 ghc-options: -Wall
32 ghc-options: -Wall
33+ if os(windows)
34+ Cpp-Options: -DWINDOWS
35+
33
36
34source-repository head
37source-repository head
35 type: git
38 type: git
warp/Network/Wai/Handler/Warp/Internal.hs+4
@@ -64,6 +64,9 @@ module Network.Wai.Handler.Warp.Internal (
64 , Source
64 , Source
65 , recvRequest
65 , recvRequest
66 , sendResponse
66 , sendResponse
67+ -- * Platform dependent helper functions
68+ , setSocketCloseOnExec
69+ , windowsThreadBlockHack
67 ) where
70 ) where
68
71
69import Network.Wai.Handler.Warp.Buffer
72import Network.Wai.Handler.Warp.Buffer
@@ -79,3 +82,4 @@ import Network.Wai.Handler.Warp.SendFile
79import Network.Wai.Handler.Warp.Settings
82import Network.Wai.Handler.Warp.Settings
80import Network.Wai.Handler.Warp.Timeout
83import Network.Wai.Handler.Warp.Timeout
81import Network.Wai.Handler.Warp.Types
84import 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
522 when (S.length bs >= slowlorisSize || bufsize <= slowlorisSize) $ T.tickle th
522 when (S.length bs >= slowlorisSize || bufsize <= slowlorisSize) $ T.tickle th
523 return bs
523 return bs
524
524
525+-- | Set flag FileCloseOnExec flag on a socket (on Unix)
526+--
525-- Copied from: https://github.com/mzero/plush/blob/master/src/Plush/Server/Warp.hs
527-- Copied from: https://github.com/mzero/plush/blob/master/src/Plush/Server/Warp.hs
528+--
529+-- @since 3.2.17
526setSocketCloseOnExec :: Socket -> IO ()
530setSocketCloseOnExec :: Socket -> IO ()
527#if WINDOWS
531#if WINDOWS
528setSocketCloseOnExec _ = return ()
532setSocketCloseOnExec _ = return ()
warp/Network/Wai/Handler/Warp/Windows.hs+3
@@ -10,6 +10,9 @@ import Control.Concurrent
10
10
11import Network.Wai.Handler.Warp.Imports
11import Network.Wai.Handler.Warp.Imports
12
12
13+-- | Allow main socket listening thread to be interrupted on Windows platform
14+--
15+-- @since 3.2.17
13windowsThreadBlockHack :: IO a -> IO a
16windowsThreadBlockHack :: IO a -> IO a
14windowsThreadBlockHack act = do
17windowsThreadBlockHack act = do
15 var <- newEmptyMVar :: IO (MVar (Either SomeException a))
18 var <- newEmptyMVar :: IO (MVar (Either SomeException a))
warp/warp.cabal+1−1
@@ -1,5 +1,5 @@
1Name: warp
1Name: warp
2−Version: 3.2.16
2+Version: 3.2.17
3Synopsis: A fast, light-weight web server for WAI applications.
3Synopsis: A fast, light-weight web server for WAI applications.
4License: MIT
4License: MIT
5License-file: LICENSE
5License-file: LICENSE