[Haskell-cafe] Socket not released

Jonathan Geddes geddes.jonathan at gmail.com
Sat Aug 7 22:19:22 EDT 2010


Thank you for your response

> Are you certain of this part?  The usual problem with this kind of program
> is that the system holds the socket open for a minute or so in case there
> are any packets in flight for the connection (the lower level network
> protocols not being 100% reliable).

I'm not certain, but here's what I'm seeing. The process tries n times
to acquire the socket, pausing for a second or so between attempts.
While running a "child" process I will run a fresh process so that the
two processes are competing for the socket, but neither of them are
getting it. In half a dozen such test cases the fresh process grabs
the socket on the very next attempt after the child process is
interrupted. But if I interrupt the fresh process, the child process
continues to fail to acquire the socket.

>And the workaround is to set
> SO_REUSEADDR before binding the port; in Haskell,
>> setSocketOption socket ReuseAddr 1

I'm using the Network Module which sets ReuseAddr, according to its
documentation.

--Jonathan


More information about the Haskell-Cafe mailing list