[ redirected to [EMAIL PROTECTED] ]

> Good day everyone, I was fiddling around with this tiny echo
> client/server haskell program from 'The Great Language Shootout'
> site (http://www.bagley.org/~doug/shootout/) and got stuck. 
> 
> The code (attached) has been reformatted with minimal API tweak
> (mkPortNumber, writeSocket, readSocket) to please my ghc-5.02.2, and
> all what I get is something stuck forever after the first
> iteration:
> 
> $ ./echo 3
> Client wrote: Hello there sailor
> Server recv: Hello there sailor
> Server read: Hello there sailor
> Server wrote: Hello there sailor
> 
> After adding all these print statement, I still don't have a clue
> what's jammed there. Hope someone here can shred some light.

It turns out to be a bug in the network library; we weren't putting the
socket returned from accept into non-blocking mode.  It works fine if
you use Handles rather than send/recv because the act of making a Handle
from a file descriptor sets non-blocking mode on the FD, so a workaround
for your program is just to insert a call to socketToHandle on the
socket returned from accept (you don't have to use the Handle, just
calling socketToHandle has the desired effect).

Thanks for the report.

> BTW, I'd also like to take this chance to ask how to debug a haskell
> program in general?

With putStr or IOExts.trace, or using one of the more sophisticated
debugging tools such as the nhc98 tracing system or Andy Gill's Observe
library.  You should be able to find links on the www.haskell.org pages
to these projects.

Cheers,
        Simon

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

Reply via email to