通用套接字选项
1)SO_BROADCAST 本选项开启或禁止进程发送广播消息的能力,只有数据报套接字支持广播,并且还必须是在支持广播消息的网络上
2)SO_DEBUG 本选项仅由TCP支持,当TCP开启该选项时,内核将为TCP在该套接字发送和接收的所有分组保留详细跟踪信息,这些信息保存在内核的某个环形缓冲区中,并可用trpt程序进行检查
3)SO_DONTROUTE 本选项规定外出的分组将绕过底层协议的正常路由机制,路由守护进程(routed和gated)经常使用本选项来绕过路由表
4)SO_ERROR 当一个套接字上发生错误时,源自Berkeley的内核中的协议模块将该套接字的明文so_error的变量设为标准的Unix_Exxx值中的一个,我们称它为该套接字的待处理错误,内核能够以下面两种方式之一立即通知该错误:
a)如果进程阻塞在对该套接字的select调用上,那么无论是检查可读条件还是可写条件,select均返回并设置其中一个或所有两个条件;
b)如果进程使用信号驱动式I/O模型,那就给进程或进程组产生一个SIGIO信号
5)SO_KEEPALIVE 设置后,如果2小时内无数据交换,TCP就会自动发送一个保活探测分节(keep-alive probe)
6)SO_LINGER 本选项指定close函数对面向连接协议如何操作,默认操作是close立即返回,但是如果有数据残留在套接字发送缓冲区中,系统将试着把这些数据发送给对端
7)SO_RCVBUF和SO_SNDBUF 这两个套接字选项允许我们改变接收缓冲区和发送缓冲区默认大小
当设置接收缓冲区大小时,函数调用顺序很重要,这时因为TCP的窗口规模选项是在建立连接时使用SYN分节与对端互换得到的。对于客户,这意味着SO_RCVBUF选项必须在connect之前设置,对于服务器,这意味着该选项必须在调用listen之前给监控套接字设置,给已连接的套接字设置该选项对于可能存在的窗口规模没有任何影响。TCP套接字缓冲区大小至少应该是相应连接MSS的四倍,为避免潜在的缓冲区空间浪费,TCP套接字缓冲区大小还必须是相应连接的MSS值的偶数倍。
8)SO_REUSEADDR 该选项起到以下四个功用:
a)允许启动一个监听服务器并捆绑其众所周知端口,即使以前建立的将该端口用作他们的本地端口的连接仍然存在。这个条件通常是这样碰到的:
I)启动一个监听服务器;
II)连接请求到达,派生一个子进程来处理客户;
III)监听服务器终止,但子进程继续为现有连接上的客户提供服务;
IV)重启监听服务器;
b)允许同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP即可。
c)允许单个进程捆绑同一端口到多个套接字上,只有每次捆绑指定不同的本地IP地址即可。
d)允许完全重复的捆绑:当一个IP地址和端口已经绑定到某个套接字时,如果传输协议支持,同样的IP地址和端口还可以绑定到另外一个套接字。一般来说仅UDP套接字支持该特性。
A. TCP_MAXSEG(Maximum Segment Size):它指定在TCP连接中所使用的最大分段大小(即每个TCP报文段中的数据大小)。通过调整该选项可以影响TCP连接的吞吐量和延迟。较小的分段大小可以减少网络拥塞情况下的丢包率和重传时间,但会增加协议开销。
B. TCP_NODELAY:该选项用于禁用Nagle算法,它可以提高小数据包的实时性,适用于对延迟要求较高的应用程序。当使用该选项时,TCP连接将立即发送数据,而不会等待数据缓冲区填满或到达一定的延迟时间。
C. TCP_SYNCNT(Synchronize Retry Count):它用于设置在发生连接超时或失败后的重试次数。当连接无法建立或已断开时,TCP协议将尝试重新建立连接,该选项表示重试的次数。调整该选项可以影响TCP连接的可靠性和连接建立的速度。
D. TCP_KEEPALIVE:该选项用于启用TCP连接的保活机制。当启用时,TCP连接会定期发送保活探测数据包以检测连接是否仍处于活动状态。该机制可以用于检测和清理因网络故障或其他原因导致的空闲或已失效的连接。