on master help sign in
FD_CLOEXEC #133
commit543a9c5ae1db55c17c256b04124029957b6cafdf authorMichael Snoyman <michael@snoyman.com> dateTue 8 Jan 2013, 08:40 (14 years ago) parent3e5c378
2 files changed+18−4
sources.txt−1 warp/Network/Wai/Handler/Warp/Run.hs+18−3
sources.txt−1
@@ -12,4 +12,3 @@
1212./wai-websockets
1313./wai-eventsource
1414./mime-types
15−wai-logger
warp/Network/Wai/Handler/Warp/Run.hs+18−3
@@ -33,6 +33,9 @@ import Prelude hiding (catch)
3333#if WINDOWS
3434import qualified Control.Concurrent.MVar as MV
3535import Network.Socket (withSocketsDo)
36+#else
37+import System.Posix.IO (FdOption(CloseOnExec), setFdOption)
38+import Network.Socket (fdSocket)
3639#endif
3740
3841#if SENDFILEFD
@@ -90,11 +93,13 @@ runSettings set app = withSocketsDo $ do
9093 runSettingsSocket set s app)
9194 forever (threadDelay maxBound) `finally` clean
9295#else
93−runSettings set =
96+runSettings set app =
9497 bracket
9598 (bindPort (settingsPort set) (settingsHost set))
96− sClose .
97− flip (runSettingsSocket set)
99+ sClose
100+ (\socket -> do
101+ setSocketCloseOnExec socket
102+ runSettingsSocket set socket app)
98103#endif
99104
100105-- | Same as 'runSettings', but uses a user-supplied socket instead of opening
@@ -109,6 +114,7 @@ runSettingsSocket set socket app =
109114 where
110115 getter = do
111116 (conn, sa) <- accept socket
117+ setSocketCloseOnExec socket
112118 return (socketConnection conn, sa)
113119
114120runSettingsConnection :: Settings -> IO (Connection, SockAddr) -> Application -> IO ()
@@ -210,3 +216,12 @@ connSource Connection { connRecv = recv } th = src
210216 when (S.length bs >= 2048) $ liftIO $ T.tickle th
211217 yield bs
212218 src
219+
220+-- Copied from: https://github.com/mzero/plush/blob/master/src/Plush/Server/Warp.hs
221+setSocketCloseOnExec :: Socket -> IO ()
222+#if WINDOWS
223+setSocketCloseOnExec _ = return ()
224+#else
225+setSocketCloseOnExec socket =
226+ setFdOption (fromIntegral $ fdSocket socket) CloseOnExec True
227+#endif