C# .Net SendAsync是否始终发送所有数据?

C# .Net SendAsync是否始终发送所有数据?,c#,networking,C#,Networking,Socket.SendAsync是否始终发送字节[]缓冲区中分配给SocketAsyncEventArgs的所有数据?我已经测试了一些代码,但只在本地网络上测试过,而且似乎是这样 编辑: 可以,但它是否总是在运行完成的事件之前发送所有数据 唯一的socket.BeginSend没有,如果我没记错的话。不会的。这里有很多因素需要考虑,包括缓冲、超时等……p> 最简单的考虑是IPv4级别上的包的限制。IPV4数据包具有无法超过的严格限制(65535字节)。因此,SendAsync无法将大于IPV4数

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

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


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

不会的。这里有很多因素需要考虑,包括缓冲、超时等……p>

最简单的考虑是IPv4级别上的包的限制。IPV4数据包具有无法超过的严格限制(65535字节)。因此,SendAsync无法将大于IPV4数据包大小的数据推送到单个数据包中。

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

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


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

是否有方法检测缓冲区大小或是否有安全大小?