dotnet的tcp套接字的send方法到底什么时候不发送所有字节?

时间:2019-12-14 12:33:21

标签: c# .net tcp nagle

就像所有套接字API一样,it says that it returns the number of bytes actually sent。在什么情况下返回的数字与输入的大小不匹配?

我幼稚的假设是它将发出full segments until the window is full,并且一旦它等待ACK就会返回(我是从W10发送到Ubuntu,默认情况下都使用Nagle的算法)

但是,即使我传递了大于100MB的缓冲区来发送,它也总是返回输入缓冲区的大小。标准库会自动“内部调用多次发送”,还是我的ubuntu发送ACK的速度太快?还是我错误地解释了API和/或Nagle的算法?

1 个答案:

答案 0 :(得分:0)

这似乎取决于操作系统的行为。 Dotnetcore并没有做任何特别的事情,例如多次调用send。您的论据几乎完全通过以下方式传递给系统调用:Socket.Send-> SocketPal.Send-> SystemNative_SendMessage