SO_SNDLOWAT
套接字选项的值设置为1024 * 64
。在Linux上,此选项不可更改,其值为1。我想知道,在Linux上不将
SO_SNDLOWAT
设置为1024 * 64
会对软件执行产生什么影响。问题是我找到了两个定义(解释)
SO_SNDLOWAT
的目的:1. 在Linux套接字手册中找到: SO_SNDLOWAT指定缓冲区中的最小字节数,直到套接字层将数据传递给协议
我理解它指定了要进行处理的缓冲区的最小字节数(在这种情况下,用于发送消息)。缓冲区至少需要填充
SO_SNDLOWAT
字节才能继续进行。2. 在书《UNIX网络编程:W. Richard Stevens、Bill Fenner、Andrew M. Rudoff的套接字网络API》中找到: 发送低水位标记是必须在套接字发送缓冲区中存在的可用空间量,以使选择返回“可写”。
我理解,如果我想在套接字缓冲区中写入(无论我要写入的大小),缓冲区至少需要有
SO_SNDLOWAT
字节的可用空间。我不知道
SO_SNDLOWAT
的含义。
select
询问一个套接字是否可写,内核应该在此时分配一个缓冲区,并且只有在它能够完成时才返回给应用程序。我可以理解要求保证send
至少能够接受n字节的优点。 - Simon Richter