Off the top of my head, I'd say that you are using the same
thread to service all the socket connections so when one socket blocks, times out or throws an exception it affects all the connections. As for why it behaves differently on different OS's, that is strange, but there are going to be implementation and configuration differences which may account for it. Can you post a small sample of code that exhibits this behavior?