Finalisation in "withSocketsDo"
I'm using GHC 5.02.2, but I believe this comment still applies. While debugging my socket-using program on a Win98 machine my DNS (or some related part of networking assembly) appears to die after having my custom application throw an exception. I think the following change will fix this: Replace in Network.Socket module: withSocketsDo act = do x <- initWinSock if ( x /= 0 ) then ioError (userError "Failed to initialise WinSock") else do v <- act shutdownWinSock return v ...with... withSocketsDo act = do x <- initWinSock if ( x /= 0 ) then ioError (userError "Failed to initialise WinSock") else act `finally` shutdownWinSock I cannot guarantee that this is the solution to my problem, but when I catch all exceptions within the body of the argument IO action the DNS problem does not arise. Also I doubt the exception utility function "finally" is within scope, this is simply the clearest way to write my fix :) Keep up the good work!