套接字选项SO_SNDLOWAT的用途是什么

gre*_*reg 7 unix sockets linux porting

我目前正在使用C语言从Tru64移植到Linux Suse 11.在Tru64上,他们将SO_SNDLOWATsocket选项的值设置为1024 * 64.在Linux上,此选项不可更改,其值为1.

我想弄清楚,是什么不设置影响SO_SNDLOWAT1024 * 64在Linux软件执行.

问题是我找到了两个定义(解释)的目的SO_SNDLOWAT:

  1. 在Linux上的socket的手册页上找到:

    SO_SNDLOWAT指定缓冲区中的最小字节数,直到套接字层将数据传递给协议

    我知道它指定缓冲区中要进行的最小字节数(在这种情况下用于发送消息).缓冲区需要至少填充SO_SNDLOWAT字节才能继续

  2. 在" UNIX网络编程:W. Richard Stevens的插座网络API,Bill Fenner,Andrew M. Rudoff " 一书中找到

    发送低水位标记是套接字发送缓冲区中必须存在的可用空间量,以便选择返回"可写".

    我明白了,如果我想在套接字缓冲区中写入(无论我写的是什么大小),缓冲区需要有最少的SO_SNDLOWAT字节空闲.

我不知道该怎么做SO_SNDLOWAT.

Bre*_*ale 1

第一个描述是正确的解释。

至于无法设置的影响SO_SNDLOWAT,我认为这并不重要,因为性能取决于 Nagle 算法、路径 MTU 发现等。我怀疑其他 TCP/IP 实现会默默地忽略此选项。