 <p>When you receive the data in the ReadCallback, you then (even if you haven't received all the data you are expecting) call Send(), which then does an async send, in the send callback you then call Send() again, this, I think, is what you mean by spamming the client, as this will just loop around sending the same thing to the client over and over.</p> <p>I suggest you check what you have received in the first place, it's entirely possible that the call to receive won't return all the data you are expecting in one go. Then don't call Send in the SendCallback if you don't want to send the data to the client again.</p> <p>Oh, and remove the calls to shutdown and close the socket...</p>