9.2. TCP_CORK 套接字选项
TCP_CORK
选项收集套接字中的所有数据数据包,并防止传输它们,直到缓冲区填充到指定的限值为止。这可让应用程序在内核中构建数据包,并在禁用 TCP_CORK
时发送数据。TCP_CORK
使用 setsocketopt()
函数在套接字文件描述符上设置。在开发程序时,如果必须从文件中发送批量数据,请考虑使用带有 sendfile()
函数的 TCP_CORK
。
当各种组件在内核中构建逻辑数据包时,使用 setsockopt
socket API 将其配置为 1 来启用 TCP_CORK
。这称为"展开套接字"。如果相应时间没有删除 cork,则 TCP_CORK
可能会导致错误。
以下示例演示了通过 setockopt
套接字 API 启用 TCP_CORK
。
int one = 1; setsockopt(descriptor, SOL_TCP, TCP_CORK, &one, sizeof(one));
在一些环境中,如果内核无法识别何时删除 cork,您可以按如下方式手动删除它:
int zero = 0; setsockopt(descriptor, SOL_TCP, TCP_CORK, &zero, sizeof(zero));
其他资源
-
sendfile(2)
man page