On Friday, June 27, 2003, at 07:08 PM, Volker Stolz wrote:


[Moving to [EMAIL PROTECTED]

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 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 -- [EMAIL PROTECTED]
If e-mail does not work try [EMAIL PROTECTED]

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

Reply via email to