c# - 为什么在调用 Socket.BeginSend 后我的发送回调执行得如此之快?

标签 c# sockets tcp

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

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

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

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

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

最佳答案

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

关于c# - 为什么在调用 Socket.BeginSend 后我的发送回调执行得如此之快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18537362/

相关文章:

c# - 使用 Roslyn 编译带有空项目的解决方案会报错

python - 如何在 Python 中维护 1000 个阻塞的 TCP 连接?

javascript - Chrome 扩展程序 : Is it possible to create a TCP/Websocket based server on a folder?

c# - WCF 与 Visual Studio 2012

c# - LINQ 中的连接/联合表

c# - 未实现自定义 AuthorizeAttribute

sockets - 连接超时和套接字超时建议

C socket 麻烦

linux - 滥用cURL与Redis通信

c++ - 我可以将任意源 IP 绑定(bind)到套接字吗?