Reading/Writing sockets concurrently

Mårten Dolk dolk at dtek.chalmers.se
Thu Dec 9 12:46:07 EST 2004


Hi,

I'm trying to create a client application that needs to read and write 
data from a socket. What I want to do is to have one thread reading the 
socket and another thread writing to the same socket, but I can't get it 
to work.

I know that there is a problem with having two threads reading from the 
same Handle (as in the aaaa bbbb example), due to the locking. To avoid 
this blocking I open the socket with Network.Socket.socket and create 
two handles with socketToHandle, one in ReadMode and one in WriteMode.

But the threads still seem to be blocking each other and the program 
runs very slowly. I am using channels to have the read and write threads 
communicate with other threads in the application and by removing a 
writeChan in one of these other threads the program crashes with a 
"Fail: thread blocked indefinitely".

Are there any good examples of how to use sockets with  Haskell.  I have 
no way of knowing in which order I will need to read data from and write 
data to the socket.

I am using ghc version 6.2.2 on Linux.

Thanks in advance
-Mårten-


More information about the Glasgow-haskell-users mailing list