SO_BROADCAST套接口选项:
此选项使能或禁止进程发送广播消息的能力。只有数据报套接口支持广播,并且还必须是在支持广播消息的网络上(例如以太网、令牌网)。不能在一个点对点链路上进行广播。
SO_DEBUG套接口选项:
此选项仅由TCP支持,当该选项使能时,内核对TCP在此套接口所 发送和接收的所有分组跟踪详细信息。这些信息保存在内核的环形缓冲区中,可由程序trpt来进行检查。
SO_DONTROUTE套接口选项:
此选项规定发出的分组将旁路底层协议的正常路由机制。
SO_ERROR套接口选项:
当套接口上发生错误时,内核可立即以下面两种方式通知进程:
(1)如果进程阻塞于对些套接口的select调用 ,则无论是检查可读条件还是可写条件,select均返回并设置其中一个或所有两个条件
(2)如果进程使用信号驱动I/O模型,则给进程或进程组生成信号SIGIO
进程然后可以通过获取SO_ERROR套接口选项来得到so_error的值。由getsockopt返回的整数值就是些套接口的待处理错误。当进程调用read且没有数据返回时,如果so_error为非0,则read返回-1且errno设为so_error的值,接着so_error的值被复位为0.如果套接口有数据在排队,则read返回那些数据而不是返回错误条件。如果在进程调用 write时so_error为非0值,则write返回-1且errno设为so_error的值,so_error也被复位为0.
SO_KEEPALIVE套接口选项:
给一个TCP套接口设置保持存活选项后,如果2小时 内在此套接口的任一方向没有数据交换,TCP会自动给对方发送一个保持存活探测分节。这是一个对方必须响应的TCP分节,它会导致以下三种情况:
(1)对方以期望的ACK响应,应用进程得不到通知。又过仍无动静的2小时 后,TCP将发出另一个探测分节。
(2)对方以RST响应,告诉本地TCP,对方已崩溃且已重新启动。套接口的待处理错误被置为ECONNRESET,套接口本身则被关闭。
(3)对方对保持存活探测分节无任何反应。
SO_LINGER套接口选项:
此选项指定函数close对面向连接的协议如何操作(TCP)。缺省操作是close立即返回,但如果有数据残留在套接口发送缓冲区中,系统将试着将这些数据发送给对方。
SO_LINGER套接口选项使我们可以改变这个缺省设置。此选项要求用户进程与内核间传递如下结构,它在头文件<sys/socket.h>中定义:
#include <sys/socket.h>
struct linger
{
int l_onoff;/*0 = off, nonzero = on*/
int l_linger; /*linger time seconds*/
};
对setsockopt的调用将依两个结构成员的值导致下列三种情况的某一种:
1、如果l_onoff为0, 则选项关闭,l_linger的值被忽略,且close立即返回
2、如果l_onoff为非0值且l_linger为0,则当套接口关闭时,TCP将丢弃保留在套接口发送缓冲区中的任何数据并发送一个RST给对方,而不是通常的四分组连接终止序列。
3、如果l_onoff为非0值且l_linger也为非0值,那么当套接口关闭时内核将拖延一段时间,也就是说,如果套接口发送缓冲区仍留有数据,进程将处于睡眠状态,一直到(1)所有数据都已发送完且均被对方确认或(2)延滞时间到。如果套接口被设置为非阻塞,它将不等待close完成,即使延滞时间为非0也是如此。当使用SO_LINGER选项的这个的特性时,应用进程检查close的返回值是非常重要的,因为,如果在数据发送完并被确认前延滞时间到的话,close将返回EWOULDBLOCK错误且套接口发送缓冲区中的任何数据都丢失。
SO_OOBINLINE套接口选项:
当此选项打开时,带外数据将被保留在正常的输入队列中。当发生这种情况时,接收函数的MSG_OOB标志不能用来读带外数据。
SO_RCVBUF和SO_SNDBUF套接口选项:
当设置TCP套接口接收缓冲区的大小时,函数调用 的顺序是很重要的,这是因为TCP的窗口规模选项是在建立连接时用SYN与对方互换得到的。对于客户端,这意味着SO_RCVBUF选项必须在调用 connect之前设置,对于服务器,在调用listen之前设置这个选项
SO_RCVLOWAT和SO_SNDLOWAT套接口选项:
每个套接口也都 有一个接收低潮限度和一个发送低潮限度。它们是函数select使用的。接收低潮限度是让select返回“可读”而在套接口接收缓冲区必须有的数据的总量。对于TCP或UDP套接口,缺省为1.发送低潮限度是让select返回“可写”而在套接口发送缓冲区中必须有的可用空间,对于TCP,缺省为2048
SO_RCVTIMEO和SO_SNDTIMEO套接口选项:
这两个选项使得我们可以给套接口设置一个接收和发送超时。缺省时两个超时都是禁止的。
接收超时影响五个输入函数:read,readv, recv, recvfrom和recvmsg。发送超时影响五个输出函数:write,writev, send, sendto和sendmsg
SO_REUSEADDR套接口选项:
1、SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知的端口,即使以前建立的将此端口用作它们的本地端口的连接仍存在
2、SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址即可。
3、SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。
4、SO_REUSEADDR允许完全重复的捆绑:当一个IP地址和端口绑定到某个套接口上时,还允许些IP和端口捆绑到另一个套接口上,这个特性仅在支持多播的系统中才有。
SO_TYPE套接口选项:
这个选项返回套接口的类型,返回的整数值是一个诸如SOCK_STREAM和SOCK_DGRAM这样的值
SO_USELOOPBACK套接口选项:
此选项仅用于路由域(AF_ROUTE)的套接口,它对这些套接口的缺省设置为打开