Check your memory usage. I'll bet you're leaking a ConnOpener object on every timeout.
You'll need something like // wipe out the InProgressConnectRetry write handler if (temporaryFd_ >= 0) { fde *F = &fd_table[temporaryFd_]; if (F->write_handler == Comm::ConnOpener::InProgressConnectRetry && F->write_data != NULL) { Pointer *ptr = static_cast<Pointer*>(F->write_data); Comm::SetSelect(temporaryFd_, COMM_SELECT_WRITE, NULL, NULL, 0); delete ptr; } added to your ConnOpener::timeout() function. Mike Mitchell