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