--- | The entry point of Lucu httpd.
+-- |The entry point of Lucu httpd.
module Network.HTTP.Lucu.Httpd
- ( runHttpd
+ ( FallbackHandler
+ , runHttpd
)
where
-- > main = let config = defaultConfig
-- > resources = mkResTree [ ([], helloWorld) ]
-- > in
--- > runHttpd config resourcees
+-- > runHttpd config resourcees []
-- >
-- > helloWorld :: ResourceDef
-- > helloWorld = ResourceDef {
-- > , resPut = Nothing
-- > , resDelete = Nothing
-- > }
-runHttpd :: Config -> ResTree -> IO ()
-runHttpd cnf tree
- = cnf `seq` tree `seq`
- withSocketsDo $
+runHttpd :: Config -> ResTree -> [FallbackHandler] -> IO ()
+runHttpd cnf tree fbs
+ = withSocketsDo $
do installHandler sigPIPE Ignore Nothing
so <- listenOn (cnfServerPort cnf)
loop so
loop so
-- 本當は Network.accept を使ひたいが、このアクションは勝手に
-- リモートのIPを逆引きするので、使へない。
- = so `seq`
- do (h, addr) <- accept' so
+ = do (h, addr) <- accept' so
tQueue <- newInteractionQueue
- readerTID <- forkIO $ requestReader cnf tree h addr tQueue
+ readerTID <- forkIO $ requestReader cnf tree fbs h addr tQueue
writerTID <- forkIO $ responseWriter cnf h tQueue readerTID
loop so
accept' :: Socket -> IO (Handle, So.SockAddr)
accept' soSelf
- = soSelf `seq`
- do (soPeer, addr) <- So.accept soSelf
+ = do (soPeer, addr) <- So.accept soSelf
hPeer <- So.socketToHandle soPeer ReadWriteMode
return (hPeer, addr)