.Net SendAsync总是发送所有数据?

时间:2009-03-23 19:01:13

标签: c# networking

Socket.SendAsync是否会始终发送byte[]已分配SocketAsyncEventArgs的缓冲区中的所有数据?我已经测试了一些代码,但只在本地网络上进行测试,似乎就是这样..

编辑:
好的,但它是否总是在运行完成的事件之前发送所有数据?

如果我没记错的话,唯一的socket.BeginSend没有。

2 个答案:

答案 0 :(得分:1)

不,不会。这里有很多因素要考虑,包括缓冲,超时等......

最简单的考虑因素是IPV4级别的数据包限制。 IPV4数据包具有不能超过的严格限制(65,535字节)。因此,SendAsync不可能将大于IPV4数据包大小的数据推送到单个数据包中。

答案 1 :(得分:1)

但它会尝试从MSDN上的文档发送所有数据:

“对于面向消息的套接字,请不要超过底层Windows套接字服务提供程序的最大消息大小。如果数据太长而无法通过底层服务提供程序原子传递,则不会传输任何数据,并且SendAsync方法会抛出SocketAsyncEventArgs.SocketError设置为本机Winsock WSAEMSGSIZE错误代码(10040)的SocketException。“

有时候应该拆分太大的缓冲区。它取决于底层套接字实现。