Hi,
I'm running into a problem using server code (running on a UNIX domain
socket) that I basically snatched from Simon Marlow's web server:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mainLoop sock defUser getMs =
  do putStrLn "Accepting connections..."
     installHandler sigPIPE Ignore Nothing
     loop (0::Int)
  where
    loop n =
      do (connection, peerAddress) <- accept sock
         h <- socketToHandle connection ReadWriteMode
         forkIO ( (talk n getMs defUser h `finally` goodBye n h)
                  `Exception.catch` 
                  (\e -> putStrLn ("Exception: " ++ show e))
                )
         loop (n+1)

goodBye n h =
  do putStrLn (show n ++ ": finished")
     hClose h
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

After processing a random number of connections, the server dies with 

Fail: invalid argument
Action: accept
Reason: Invalid argument

after finishing the last connection. For the record, here is the code
that is executed for each connection:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
talk n getMs user h =
  do hSetBuffering h LineBuffering
     putStrLn (show n ++ ": ")
     str <- hGetLine h
     lstr <- hGetLine h
     putStrLn ("...: " ++ lstr)         -- last output before core dump
     let msglength = read (takeWhile isDigit (drop 1 lstr))
     rawmsg <- hGetContents h
     putStrLn ("Got " ++ show (length msg) ++ " characters")
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

The machine is
Linux kailua 2.4.18-4GB #1 Wed Mar 27 13:57:05 UTC 2002 i686 unknown
The problem seems to go away if I switch to INET sockets, so I'm also including
my initialization code:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  withSocketsDo $ do 
    sock <- socket AF_UNIX Stream 0
    bindSocket sock (SockAddrUnix path)
    listen sock maxListenQueue
    getMs <- initializeAll
    mainLoop sock defUser getMs
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-Peter
_______________________________________________
Glasgow-haskell-users mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to