Am Freitag, 6. Juli 2007 04:15 schrieb Thomas Conway: > On 7/6/07, Lukas Mai <[EMAIL PROTECTED]> wrote: > > I don't see how this solves the problem. AFAICS acceptLoop never returns > > and sok is never closed. On the other hand, my program doesn't need a > > liveOpCount because the subthreads take care of themselves. It's just the > > accept loop I need to break somehow. > > Well, it works because the sub-thread dies when the program exits, so > the socket gets closed then.
But I don't want to exit the program, I just want to close the socket. (There may be more than one such loop running, all independent from each other.) My current solution looks like this: killSocket :: Socket -> IO () killSocket s = do nul <- openFd "/dev/null" WriteOnly Nothing defaultFileFlags dupTo nul (Fd $ fdSocket s) closeFd nul This makes accept blow up because s no longer refers to a socket. The resulting exception is caught and the handler closes s, avoiding a file descriptor leak. While this works fine, it seems like a kludge. I'm open to suggestions on how to improve this. :-) Lukas _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe