Oh thats interesting I had no idea

So is it possible for winsock to be connected (state 7) and yet be unresponsive (at either the client or server end)? or would an error be thrown?

And the 'keepalive' packet you were talking about - does windows automatically 'close' TCP connections if no data has been sent through them in a while?