2

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

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

我的互联网速度不可能在 7 毫秒内成功发送近 1 兆字节。

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

这种怀疑正确吗?为什么发送回调执行得这么快?

4

1 回答 1

0

是的,操作系统会缓冲数据(尽管 1MB 似乎很多)。发送永远不会向您保证远程端已收到数据。即使没有操作系统缓冲也是如此。要么让对方确认数据或Shutdown套接字,然后等待连接完成。

于 2013-08-30T16:50:40.590 回答