Socket.SendAsync
是否会始终发送byte[]
已分配SocketAsyncEventArgs
的缓冲区中的所有数据?我已经测试了一些代码,但只在本地网络上进行测试,似乎就是这样..
编辑:
好的,但它是否总是在运行完成的事件之前发送所有数据?
如果我没记错的话,唯一的socket.BeginSend
没有。
答案 0 :(得分:1)
不,不会。这里有很多因素要考虑,包括缓冲,超时等......
最简单的考虑因素是IPV4级别的数据包限制。 IPV4数据包具有不能超过的严格限制(65,535字节)。因此,SendAsync不可能将大于IPV4数据包大小的数据推送到单个数据包中。
答案 1 :(得分:1)
但它会尝试从MSDN上的文档发送所有数据:
“对于面向消息的套接字,请不要超过底层Windows套接字服务提供程序的最大消息大小。如果数据太长而无法通过底层服务提供程序原子传递,则不会传输任何数据,并且SendAsync方法会抛出SocketAsyncEventArgs.SocketError设置为本机Winsock WSAEMSGSIZE错误代码(10040)的SocketException。“
有时候应该拆分太大的缓冲区。它取决于底层套接字实现。