I just discovered this. If the server catches an exception when handing a client
request the socket will be closed but the client in various places is looking
for socket exceptions and not a null return from socket.recv, in addition the
client code is not correct with respect to gobject.IO_HUP, it needs to
immediately remove the io watcher and only then queue a future reconnect
request. The problem is the io watch routine will keep firing signaling an
IO_HUP if it has not been removed from the watch queue.
The code in question was totally re-written, no evidence of this behavior anymore.