Q:

Why does my send callback execute so quickly after calling Socket.BeginSend?

When I send a considerable chunk of data to a remote machine, the send callback is executed almost immediately. 
[05:10:35:981] ChildSocket.Send(): Sending 1048508 bytes.
[05:10:35:988] ChildSocket.SendCallback(): Sent 1048508 bytes.

There is no way that my internet is fast enough to successfully send near one mega byte in 7 milliseconds. 
Because of this behaviour I am under the impression that calling BeginSend merely writes the send buffer to the operating system and the operating system will send it in due time. 
Is this suspicion correct? Why does the send callback execute so quickly? 

A:

Yes, the OS buffers the data (although 1MB seem quite a lot). Send never guarantees you that data was received by the remote side. This holds true even without OS buffering. Either let the other side acknowledge the data or Shutdown the socket and wait until the connection is done.

