X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FHttpd.hs;h=b8e1845dd32e41edfb966dbc6f460ba936948b90;hb=5b255535f2c7d2a6d4622ad164b31e63746b906e;hp=c5e8f04981ee7845e9049feacbfe0d43121efa77;hpb=5778aa6d13c20560e633e8a6f77c3e7f55ea1e51;p=Lucu.git diff --git a/Network/HTTP/Lucu/Httpd.hs b/Network/HTTP/Lucu/Httpd.hs index c5e8f04..b8e1845 100644 --- a/Network/HTTP/Lucu/Httpd.hs +++ b/Network/HTTP/Lucu/Httpd.hs @@ -6,11 +6,13 @@ module Network.HTTP.Lucu.Httpd import Control.Concurrent import Network +import qualified Network.Socket as So import Network.HTTP.Lucu.Config import Network.HTTP.Lucu.Interaction import Network.HTTP.Lucu.RequestReader import Network.HTTP.Lucu.Resource.Tree import Network.HTTP.Lucu.ResponseWriter +import System.IO import System.Posix.Signals -- | This is the entry point of Lucu httpd. It listens to a socket and @@ -54,8 +56,16 @@ runHttpd cnf tree where loop :: Socket -> IO () loop so - = do (h, host, _) <- accept so - tQueue <- newInteractionQueue - readerTID <- forkIO $ requestReader cnf tree h host tQueue - writerTID <- forkIO $ responseWriter cnf h tQueue readerTID + -- 本當は Network.accept を使ひたいが、このアクションは勝手に + -- リモートのIPを逆引きするので、使へない。 + = do (h, addr) <- accept' so + tQueue <- newInteractionQueue + readerTID <- forkIO $ requestReader cnf tree h addr tQueue + writerTID <- forkIO $ responseWriter cnf h tQueue readerTID loop so + + accept' :: Socket -> IO (Handle, So.SockAddr) + accept' soSelf + = do (soPeer, addr) <- So.accept soSelf + hPeer <- So.socketToHandle soPeer ReadWriteMode + return (hPeer, addr)