I think some of the remaining problems is caused by on the io code's handling of connect. It uses one object of class connect_fd when waiting for the connection to succeed or fail (it uses non-blocking mode, so that it doesn't block in connect()), and creates a new object of class io_fd when the connection is set up. That loses some properties of the original object, in particular its exception handler, and any references to it from some resources list. It would be better to use a single object for the entire lifetime of the fd. I'm reworking i/o now, and in the process getting rid of most or all of the subclasses of lsh_fd, and (hopefully) also cleaning it up a little. /Niels
