本文来自: getsockopt(2) — Linux manual page
1.句法:
int getsockopt(int sockfd,int level,int optname,void optval[restrict *.optlen], socklen_t *restrict optlen);
int setsockopt(int sockfd, int level, int optname,const void optval[.optlen],socklen_t optlen);
2.描述
getsockopt()和setsockopt()操纵被指向的套接字的选项,通过文件描述符server_sockfd。选项可能存在于多个协议层,它们总是位于最高级别的套接字层中。在操作套接字选项时,必须指定选项所在的级别以及选项的名称。为了在套接字API级别操纵选项,level被指定为SOL_SOCKET。在其他任何级别上进行选项操作时,应提供控制该选项的相应协议的协议号。
参数optval和optlen被用于访问setsockopt( )的选项值,对于getsockopt()函数,它们会标识一个缓冲区,用于返回请求的选项的值。
对于getsockopt()函数,optlen是一个值结果参数,其初始值为指向optval缓冲区的大小,并在返回时被修改以指示实际返回值的大小。如果不提供或不返回任何选项值,optval可以为NULL。
选项名和任何指定的选项将不经解释地传递给相应的协议模块进行解释。文件<sys/socket.h>包含了有关套接字级选项的定义,如下所述。其他协议层的选项在格式和名称上各不相同,请参阅手册第4节中的相应条目。
大多数套接字级选项使用整数类型的optval参数。对于setsockopt()函数,如果要启用一个布尔选项,则参数应不为零;如果要禁用该选项,则参数应为零。
有关可用套接字选项的详细描述,请参阅 socket(7) 和相应的协议手册页。
SO_REUSEADDR:
表示在验证绑定(2)调用中提供的地址时使用的规则应允许重用本地地址。对于AF_INET套接字,这意味着一个套接字可以绑定,除非存在一个已激活的监听套接字绑定到该地址。当监听套接字使用INADDR_ANY和特定端口绑定时,对于任何本地地址都不可能绑定到该端口。参数是一个整数布尔标志。