
This may be related to the answer just given to do with finalizing the Handles, as I have a problem with sockets hanging around after a host name resolution has failed (using the simple socket library). Having looked at the code I would like to suggest the following change:
connectTo hostname (PortNumber port) = do proto <- getProtocolNumber "tcp" sock <- socket AF_INET Stream proto he <- getHostByName hostname connect sock (SockAddrInet port (hostAddress he)) socketToHandle sock ReadWriteMode
Should become:
connectTo hostname (PortNumber port) = do proto <- getProtocolNumber "tcp" sock <- socket AF_INET Stream proto (do he <- getHostByName hostname connect sock (SockAddrInet port (hostAddress he)) socketToHandle sock ReadWriteMode) `Exception.catch` (\e -> do sClose sock;throw e)
Is this a sensible change to make?
Yes, well spotted. I'll add the exception handler. Cheers, Simon