
Koen writes:
accept :: Socket -> IO (Handle, HostName, PortNumber)
Unfortunately, this is a blocking function, which means that the whole program blocks when it is waiting for a connection. [..] Ideally, I would like to integrate this with the function "hSelect" from the Select module.
man 2 accept on my Linux says:
In order to be notified of incoming connections on a socket, you can use select(2) or poll(2). A readable event will be delivered when a new connection is attempted and you may then call accept to get a socket for that con- nection.
So I imagine if you passed the socket as the first arg to Select.hSelect, you'd get what you want. SocketPrim.socketToHandle claims to do the required conversion.
disclaimer: I haven't tried this.
Strange, I haven't received the original message in this thread yet (I read it from the archives). 'accept' doesn't block the whole program, it only blocks the current thread - it's designed to be well-behaved in a multi-threaded program. If you need the select() behaviour, I recommend using multiple threads and let GHC's RTS handle the I/O multiplexing. You mentioned that you weren't using concurrency for a good reason - care to elaborate? Cheers, Simon
participants (1)
-
Simon Marlow