SO_RCVLOWAT和SO_SNDLOWAT
这两个选项分别表示了TCP接收缓冲区和发送缓冲区的低水位标准,一般在I/O复用时判断socket可读还是可写。当TCP接收缓冲区的可读数据大于其低水位标准时,I/O复用系统通知应用程序可以从socket上读取数据;TCP发送缓冲区的空闲空间大于其低水位标准,I/o复用系统通知向socket上写数据。
SO_LINGER
用来控制close系统调用在关闭TCP连接时的行为。
#include<sys/socket.h>
struct linger
{
int l_onoff;//开启或者关闭
int l_linger;//滞留时间
}
当l_onoff等于0,SO_LINGER不起作用。
l_onoff不为0,l_linger等于0。此时close系统调用立即返回,TCP模块将丢弃被关闭的socket对应的TCP发送缓冲区残留的数据
l_onoff不为0,l_linger大于0。此时close的行为取决于1、被关闭的sokcet 是否还残留数据;2、socket是阻塞还是非阻塞;对于阻塞的将等待l_linger长的时间。如果是非阻塞的则立即返回。