So, you get as far as send, but then the error occurs? Does it take you to the Send line such that the Receive line is never reached?

Frankly, I don't think the Receive line is all that good. If Send doesn't block, the Receive line will be executed pretty much immediately, before even a fast reply could arrive well. The socket should raise an event that you can handle, though to be fair, I have only worked with UDP lately, which isn't quite the same. In any case, the error doesn't sound consistent with this issue anyways. You are getting a timeout, which I would not expect to happen with the Receive call.