RE: readping fd's and flushing buffers

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

A related problem... connections are refused when using accept if the hostname doesn't resolve. Maybe something like this would help, unless there is a better way? accept sock = do ~(sock', (SockAddrInet port haddr)) <- Socket.accept sock (HostEntry peer _ _ _) <- ((getHostByAddr AF_INET haddr) `Control.Exception.catch` (\_ -> return (HostEntry ((showHex ((haddr `shiftR` 24) .&. 0xff) . showChar '.' . showHex ((haddr `shiftR` 16) .&. 0xff) . showChar '.' . showHex ((haddr `shiftR` 8) .&. 0xff) . showChar '.' . showHex (haddr .&. 0xff)) "") [] AF_INET []))) handle <- socketToHandle sock' ReadWriteMode return (handle, peer, port) Regards, Keean Schupke. -----Original Message----- From: glasgow-haskell-users-admin@haskell.org [mailto:glasgow-haskell-users-admin@haskell.org]On Behalf Of Simon Marlow Sent: 09 January 2003 13:18 To: Keean Schupke; glasgow-haskell-users@haskell.org Subject: RE: readping fd's and flushing buffers
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 _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
participants (2)
-
Keean
-
Simon Marlow