Yep - this program "sometimes" fails for me with such an error message:
Fail: <socket: 8>: hGetLine: invalid argument (Invalid argument) If I omit the forkIO and do synchronous processing, I noticed that Apache Benchmark connects a second time but closes the connection immediately. When I added a `catch` \e -> mainLoop socket at the end of the main loop, it worked fine. But when I reintroduced the forkIO, it seemed to be "hanging" in the main process's accept (when the fork failed with above's error message). Any ideas? Confusingly yours, Michael On Thu, 9 Dec 2004 14:29:10 -0500, Michael Walter <[EMAIL PROTECTED]> wrote: > Hello again, > > this test program should do the relevant parts for the bug -- on > Windows it works fine, though, I'll have to check at home whether it's > reproducable using it. > > - Michael > > module Test where > > import Control.Concurrent > import Network > import System.IO > > mainLoop socket = do > (handle, _, _) <- accept socket > forkIO $ do > line <- hGetLine handle > putStrLn line > hPutStrLn handle "HTTP/1.0 200 OK\r" > hPutStrLn handle "Content-Type: text/html\r" > hPutStrLn handle "\r" > hPutStrLn handle "Test\r" > hClose handle > mainLoop socket > > main = withSocketsDo $ listenOn (PortNumber 8000) >>= mainLoop > > > > > On Thu, 9 Dec 2004 11:44:16 -0500, Michael Walter > <[EMAIL PROTECTED]> wrote: > > I'll do so at lunch break/from home tonight. > > > > Thanks, > > Michael > > > > > > > > > > On Thu, 9 Dec 2004 16:19:20 +0000, Jules Bean <[EMAIL PROTECTED]> wrote: > > > > > > On 9 Dec 2004, at 15:30, Michael Walter wrote: > > > > I continued toying with my toy web server, and I'm "sometimes" getting > > > > "Invalid argument" errors in hGetLine for a handle I retrieved from > > > > Network.listenOn. > > > > > > > > > > My first guess would be that hGetLine would return invalid argument if > > > it was called on a handle which represents a file which is now closed. > > > However, testing in GHCI suggests that returns "illegal operation > > > (handle is closed)". Could be different for network sockets, I suppose. > > > > > > > > > > > > > "Sometimes", because it works fine in the browser, except when I > > > > reload very frequently -- maybe it's related to some concurrency > > > > issues (I'm using forkIO to spawn off the handler process from the > > > > main server loop). When I wanted to benchmark the server using "ab" > > > > (Apache Benchmark), it didn't even "survive" one request but Fail'ed > > > > using that error message - "<handle: n>: hGetLine: Invalid argument". > > > > > > > > I tried adjusting the buffering mode. > > > > > > > > Do you have any ideas? > > > > > > > > > > Sounds like a double-close error or something like that. Hard to say > > > without seeing the code. Can you make a minimal example? > > > > > > Jules > > > > > > > > > _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe
