[Haskell-cafe] controlling timeout for Network.Socket.connect - how?

Manlio Perillo manlio_perillo at libero.it
Sat Feb 28 15:23:58 EST 2009


Belka ha scritto:
> Thanks, Manlio!
> 
>> What system?
> ArchLinux (2.6.27)
> 
>> Is the timeout the same with a plain C program?
> Didn't try yet... ^__^
> 
>>> I know that controlling timeout is somehow connected to select(2) 
>> Yes.
>> The only working method is to set the socket to non blocking mode, and 
>> use select (or poll/epoll/kqueue).
> 
> Thanks, now I'm confident, that am on the right way! ^__^
> I wonder, if *select* really blocks the whole process... or blocks just the
> "green" thread, that called it?.. 

select blocks the whole process.
But you should really use Control.Concurrent.threadWaitRead.

Note that:
1) when connection completes successfully, the socket descriptor becomes
    writable.
2) in case of errors, the socket descriptor becomes both writable and
    readable.


As pointed in "UNIX Network Programming" (third edition):
nonblocking connects are one of the most nonportable areas of network 
programming.

You may check the Twisted framework (if you know Python) to see a sample 
implementation).




Manlio Perillo
> It doesn't depend from being safe/unsafe FFI-ed, does it?
> 
> Belka



More information about the Haskell-Cafe mailing list