
[Moving to glasgow-haskell-users@haskell.org]
In local.haskell, you wrote:
I've been using sockets and handles with ghc-5.04.3. The strange thing is now that when I make a handle out of a socket and ask whether the handle is readable or writable, it returns True for the former and False for the latter, although sockets are bidirectional. And yes,
Do you have a small sample program which shows this behaviour? Can you try ghc-6? There have been some updates, but I cannot tell if this was a particular bug that got fixed.
Regards, Volker Installed GHC 6.0 (on MacOsX) and recompiled and it gave the same results. I hope I did everything as it should there, I am not much of an expert. The problem with the code fragment is that it is part of a very large program, but I can give the
On Friday, June 27, 2003, at 07:08 PM, Volker Stolz wrote: pertinent parts (which I guess can not be compiled by themselves). sendLogString :: String -> Bool -> IO () sendLogString message loggerDEBUGMODE = withSocketsDo (rec 0) where rec i = do handle <- connectTo loggerHOSTNAME (PortNumber (fromIntegral loggerPORTNUMBER)) hSetBuffering handle (BlockBuffering (Just 1024)) sendToAndFlush handle message loggerDEBUGMODE `catch` \exception -> if i+1 >= loggerTRIES then debug ( "Could not make a connection: no send (" ++ show exception ++ ")" ) loggerDEBUGMODE else do debug ( "Could not make a connection: sleeping (" ++ show exception ++ ")" ) loggerDEBUGMODE threadDelay loggerDELAY rec (i+1) sendToAndFlush :: Handle -- Hostname -> String -- Message to send -> Bool -- Debug logger? -> IO () sendToAndFlush handle msg loggerDEBUGMODE = do hPutStr handle msg hPutStr handle loggerSPLITSTRING hFlush handle -- The following two lines now output 'not writable and readable' b1 <- hIsWritable handle b2 <- hIsReadable handle putStrLn ((if b1 then "writable" else "not writable") ++ " and " ++ (if b2 then "readable" else "not readable")) debug "Waiting for a handshake" loggerDEBUGMODE handshake <- getRetriedLine 0 debug ("Received a handshake: " ++ show handshake) loggerDEBUGMODE where getRetriedLine i = do line <- hGetLine handle return line `catch` \_ -> if i+1 >= loggerTRIES then do debug "Did not receive anything back" loggerDEBUGMODE return "" else do debug "Waiting to try again" loggerDEBUGMODE threadDelay loggerDELAY getRetriedLine (i+1) Hope this helps. Jur -- http://www.cs.uu.nl/people/jur/progrock.html -- jur@cs.uu.nl If e-mail does not work try jurriaanhage@hotmail.com