on master help sign in
adding a new API: setInstallShutdownHandler.
commitd4a92211bb36b5a629a05f66cf36b3d04116ffbb authorKazu Yamamoto <kazu@iij.ad.jp> dateFri 15 Aug 2014, 13:16 (12 years ago) parentf2daeaf
3 files changed+19−1
warp/Network/Wai/Handler/Warp.hs+13 warp/Network/Wai/Handler/Warp/Run.hs+4−1 warp/Network/Wai/Handler/Warp/Settings.hs+2
warp/Network/Wai/Handler/Warp.hs+13
@@ -39,6 +39,7 @@ module Network.Wai.Handler.Warp (
3939 , setFdCacheDuration
4040 , setBeforeMainLoop
4141 , setNoParsePath
42+ , setInstallShutdownHandler
4243 -- ** Getters
4344 , getPort
4445 , getHost
@@ -189,3 +190,15 @@ getPort = settingsPort
189190-- Since 2.1.1
190191getHost :: Settings -> HostPreference
191192getHost = settingsHost
193+
194+-- | A code to install shutdown handler.
195+--
196+-- For instance, this code should set up a UNIX signal
197+-- handler. The handler should call the first argument,
198+-- which close the listen socket, at shutdown.
199+--
200+-- Default: does not install any code.
201+--
202+-- Since 3.1.0
203+setInstallShutdownHandler :: (IO () -> IO ()) -> Settings -> Settings
204+setInstallShutdownHandler x y = y { settingsInstallShutdownHandler = x }
warp/Network/Wai/Handler/Warp/Run.hs+4−1
@@ -85,7 +85,8 @@ runSettings set app = withSocketsDo $
8585-- Note that the 'settingsPort' will still be passed to 'Application's via the
8686-- 'serverPort' record.
8787runSettingsSocket :: Settings -> Socket -> Application -> IO ()
88−runSettingsSocket set socket app =
88+runSettingsSocket set socket app = do
89+ settingsInstallShutdownHandler set closeListenSocket
8990 runSettingsConnection set getConn app
9091 where
9192 getConn = do
@@ -98,6 +99,8 @@ runSettingsSocket set socket app =
9899 conn <- socketConnection s
99100 return (conn, sa)
100101
102+ closeListenSocket = sClose socket
103+
101104-- | Allows you to provide a function which will return a 'Connection'. In
102105-- cases where creating the @Connection@ can be expensive, this allows the
103106-- expensive computations to be performed in a separate thread instead of the
warp/Network/Wai/Handler/Warp/Settings.hs+2
@@ -56,6 +56,7 @@ data Settings = Settings
5656 -- Default: False
5757 --
5858 -- Since 2.0.3
59+ , settingsInstallShutdownHandler :: IO () -> IO ()
5960 }
6061
6162-- | The default settings for the Warp server. See the individual settings for
@@ -73,6 +74,7 @@ defaultSettings = Settings
7374 , settingsFdCacheDuration = 10
7475 , settingsBeforeMainLoop = return ()
7576 , settingsNoParsePath = False
77+ , settingsInstallShutdownHandler = const $ return ()
7678 }
7779
7880-- | Apply the logic provided by 'defaultExceptionHandler' to determine if an