我发现它可以Winsock的延迟为200ms发送呼叫Winsock的200ms的延迟问题
从MSDN: http://support.microsoft.com/kb/214397/en
Nagle算法: http://en.wikipedia.org/wiki/Nagle“s_algorithm
问题总结:
如果重复发送带有SO_SNDBUF“0”选项的小型消息(< MTU), 发送功能块200ms。
我的问题: 为什么第一个发送消息延迟为200ms?
因为在第一次发送呼叫之前TCP空闲,所以我认为第一条消息必须立即发送。
但是测试结果不是期望的。
第一条消息也延迟200ms,为什么?
谢谢你的回答。
添加一些细节:
的小消息Naggle算法的工作像以下:
1. if wire is idle, send it immediately.
2. if formal message's ACK is not received, wait until ACK & send
3. Window's TCP ack delay mechanism send ack after 200ms.
所以,我想到的是第一条消息立即发送和第二消息等待第一条消息的ACK为200毫秒,因此上。
这是错误的吗?
你为什么设置SO_SNDBUF为零?这是一个非常糟糕的主意。越大越好。如果你不想要Nagle算法,就把它关掉。不要捣鼓其他你不明白的事情。 – EJP 2012-07-12 10:04:29
@EJP:我同意你(SO_SNDBUF = 0是个坏主意)。这仅仅是追踪第三方库性能问题的好奇心(这个解决方案在SO_SNDBUF不为0的情况下解决)。 – heekyu 2012-07-12 23:59:10