遵循规范

POSIX.1-2001,POSIX.1-2008,SVr4、4.4BSD(这些系统调用首次出现在4.2BSD中)。

语法

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>

int getsockopt(int sockfd, int level, int optname,
               void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname,
               const void *optval, socklen_t optlen);

说明

getsockopt()和setsockopt()操纵文件描述符sockfd所引用的套接字的选项。选项可能存在于多个协议级别。它们始终位于最上层的套接字级别。

操作套接字选项时,必须指定该选项所在的级别和该选项的名称。要在套接字API级别上操作选项,请将级别指定为SOL_SOCKET。要在其他任何级别上操作选项,请提供控制该选项的适当协议的协议号。例如,为了指示选项将由TCP协议解释,应将级别设置为TCP的协议号;参见getprotoent(3)。

参数optval和optlen用于访问setsockopt()的选项值。对于getsockopt(),它们标识一个缓冲区,在该缓冲区中将返回所请求选项的值。对于getsockopt(),optlen是一个值结果参数,最初包含optval指向的缓冲区的大小,并在返回时进行修改以指示返回值的实际大小。如果不提供或返回任何选项值,则optval可以为NULL。

Optname和任何指定的选项将不解释地传递到适当的协议模块以进行解释。包含文件包含套接字级别选项的定义,如下所述。其他协议级别的选项的格式和名称各不相同;请查阅手册第4节中的相应条目。

大多数套接字级选项都将int参数用于optval。对于setsockopt(),参数应为非零值以启用布尔选项;如果为禁用选项,则参数应为零。

有关可用套接字选项的说明,请参见socket(7)和相应的协议手册页。

备注

POSIX.1不需要包含,并且在Linux上不需要此头文件。但是,某些历史(BSD)实现需要此头文件,而可移植的应用程序最好将其包括在内。

有关socklen_t类型的背景,请参见accept(2)。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

BUGS

某些套接字选项应在系统的较低级别处理。

错误说明

EBADF
参数sockfd不是有效的文件描述符。
EFAULT
optval指向的地址不在进程地址空间的有效部分中。对于getsockopt(),如果optlen不在进程地址空间的有效部分中,则也可能返回此错误。
EINVAL
optlen在setsockopt()中无效。在某些情况下,对于optval中的无效值,也可能发生此错误(例如,对于ip(7)中描述的IP_ADD_MEMBERSHIP选项)。
ENOPROTOOPT
该选项在指示的级别未知。
ENOTSOCK
文件描述符sockfd不引用套接字。

返回值

成功后,标准选项将返回零。如果出错,则返回-1,并正确设置errno。

Netfilter允许程序员使用关联的处理程序定义自定义套接字选项;对于此类选项,成功的返回值是处理程序返回的值。

GETSOCKOPT - Linux手册页

Linux程序员手册 第2部分
更新日期: 2020-04-11

另外参见

ioctl(2),socket(2),getprotoent(3),协议(5),ip(7),数据包(7),socket(7),tcp(7),udp(7),unix(7)

名称

getsockopt,setsockopt-在套接字上获取和设置选项

日期:2019-08-20 17:58:51 来源:oir作者:oir