Typ*_*eIA 4 sockets winapi winsock nagle
在许多UNIX TCP实现中,提供了一个套接字选项TCP_CORK,允许调用者绕过Nagle算法并明确指定何时发送物理数据包.Windows(Winsock)中是否有相同的功能?
TCP_CORK(自Linux 2.2起)
如果设置,请不要发送部分帧.再次清除该选项时,将发送所有排队的部分帧.这对于在调用sendfile(2)之前预先添加标头或用于吞吐量优化非常有用.正如目前实施的那样,TCP_CORK的输出时间上限为200毫秒.如果达到此上限,则自动发送排队的数据.自Linux 2.5.71起,此选项只能与TCP_NODELAY结合使用.此选项不应用于可移植的代码中.
(我知道TCP_NODELAY,但这不是我需要的;我仍然希望在发送缓冲区中累积多次写入,然后在我准备好发送物理数据包时触发TCP堆栈.)
FWIW我成功使用TCP_NODELAY来获取TCP_CORK样式的行为.我是这样做的:
在Windows,MacOS/X和Linux下,这对我来说很好.(注意,在Linux下,最后的零字节send()不是必需的)