GETSOCKOPT - Linux手册页
Linux程序员手册 第2部分
更新日期: 2020-04-11
名称
getsockopt,setsockopt-在套接字上获取和设置选项
语法
#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)和相应的协议手册页。
返回值
成功后,标准选项将返回零。如果出错,则返回-1,并正确设置errno。
Netfilter允许程序员使用关联的处理程序定义自定义套接字选项;对于此类选项,成功的返回值是处理程序返回的值。
错误说明
- EBADF
- 参数sockfd不是有效的文件描述符。
- EFAULT
- optval指向的地址不在进程地址空间的有效部分中。对于getsockopt(),如果optlen不在进程地址空间的有效部分中,则也可能返回此错误。
- EINVAL
- optlen在setsockopt()中无效。在某些情况下,对于optval中的无效值,也可能发生此错误(例如,对于ip(7)中描述的IP_ADD_MEMBERSHIP选项)。
- ENOPROTOOPT
- 该选项在指示的级别未知。
- ENOTSOCK
- 文件描述符sockfd不引用套接字。
遵循规范
POSIX.1-2001,POSIX.1-2008,SVr4、4.4BSD(这些系统调用首次出现在4.2BSD中)。
备注
POSIX.1不需要包含,并且在Linux上不需要此头文件。但是,某些历史(BSD)实现需要此头文件,而可移植的应用程序最好将其包括在内。
有关socklen_t类型的背景,请参见accept(2)。
BUGS
某些套接字选项应在系统的较低级别处理。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。