为什么在调用Socket.BeginSend之后我的发送回调会如此快速地执行?

时间:2013-08-30 16:14:39

标签: c# sockets tcp

当我向远程机器发送大量数据时,几乎立即执行发送回调。

[05:10:35:981] ChildSocket.Send(): Sending 1048508 bytes.
[05:10:35:988] ChildSocket.SendCallback(): Sent 1048508 bytes.

我的互联网无法在7毫秒内成功发送近一兆字节。

由于这种行为,我认为调用BeginSend只是将发送缓冲区写入操作系统,操作系统将在适当的时候发送它。

怀疑是否正确?为什么send回调执行得这么快?

1 个答案:

答案 0 :(得分:0)

是的,操作系统会缓冲数据(尽管1MB看起来非常多)。发送永远不会保证远程端收到数据。即使没有OS缓冲也是如此。让对方确认数据或Shutdown套接字并等待连接完成。