In any socket objects I've written, I've found it necessary to observe SO_KEEPALIVE errors to avoid abort condition non-detection. Also the default timeouts and check periods for SO_KEEPALIVE are usually extremely long -- I always decrease them to the 5 second range.
--bob falesch zeggz.com/raf/