Well, I think you can't do that. Imagine the situation: Server starts reading. Client starts sending. But, for some reason, the connection is VERY slow. Server then receives the time-out (imagine it does not disconnect). The server then asks for more data... but, the client is still sending the old-data. So, the server must now wait for what? The old data? The new data? How will it differentiate one data from the other? I think the fact the connection is closed is on purpose. If you want, I think you may NOT use the ReceiveTimeOut. Instead, create another thread to call "abort" in the reading thread if it takes too long, so the connection will not be aborted, but I don't really know what will happen with the data in this case. Also, depending on your requirements, it's possible to use UDP to receive the data.