11.2. TCP_CORK 套接字选项
TCP_CORK 选项收集套接字中的所有数据包,并防止传输它们,直到缓冲区填满了指定的限制。这可让应用在内核空间中构建数据包,并在禁用 TCP_CORK 时发送数据。使用 setsocketopt () 函数在套接字文件描述符上设置 TCP_CORK。在开发程序时,如果必须从文件中发送批量数据,请考虑使用带有 sendfile () 函数的 TCP_CORK。
当由各种组件在内核中构建逻辑数据包时,使用 setsockopt socket API 将其配置为 1 值来启用 TCP_CORK。这称为 "corking the socket"。如果 cork 在适当的时间没有移除,TCP_CORK 可能会导致错误。
以下示例演示了通过 setsockopt socket API 启用 TCP_CORK。
int one = 1; setsockopt(descriptor, SOL_TCP, TCP_CORK, &one, sizeof(one));
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));
int zero = 0;
setsockopt(descriptor, SOL_TCP, TCP_CORK, &zero, sizeof(zero));