getsockopt() - Unix,Linux系统调用
广告
名称getsockopt, setsockopt - 获取和设置套接字选项摘要
#include <sys/types.h>
#include <sys/socket.h>
int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen); 描述
getsockopt() 和 setsockopt() 操作与套接字关联的选项。选项可能存在于多个协议层;它们始终存在于最顶层的socket层。操作套接字选项时,必须指定选项所在的层级和选项的名称。要操作套接字层级的选项,level 指定为SOL_SOCKET。要操作任何其他层级的选项,则提供控制该选项的相应协议的协议号。例如,要指示选项应由TCP协议解释,level应设置为TCP的协议号;参见getprotoent(3)。 参数optval和optlen用于访问setsockopt()的选项值。对于getsockopt(),它们标识一个缓冲区,其中将返回请求的选项值。对于getsockopt(),optlen是一个值-结果参数,最初包含optval指向的缓冲区的大小,并在返回时修改为指示返回的值的实际大小。如果不需要提供或返回选项值,则optval可以为NULL。
Optname和任何指定的选项都将未经解释地传递给相应的协议模块以进行解释。包含文件<sys/socket.h>包含套接字级别选项的定义,如下所述。其他协议级别的选项的格式和名称各不相同;请参阅手册第4节中的相应条目。 大多数套接字级别选项使用int参数作为optval。对于setsockopt(),如果要启用布尔选项,则参数应为非零值;如果要禁用该选项,则应为零。
有关可用套接字选项的说明,请参见socket(7)和相应的协议手册页。
返回值成功时,返回零。出错时,返回-1,并相应地设置errno。错误
标签 | 描述 |
EBADF | 参数s不是有效的描述符。 |
EFAULT | optval指向的地址不在进程地址空间的有效部分。对于getsockopt(),如果optlen不在进程地址空间的有效部分,也可能返回此错误。 |
EINVAL |
setsockopt() 中的optlen无效。 |
ENOPROTOOPT | | 在指示的级别上未知该选项。 |
ENOTSOCK | 参数s是文件,而不是套接字。 |
符合标准SVr4, 4.4BSD(这些系统调用首次出现在4.2BSD中), POSIX.1-2001。注意getsockopt和setsockopt的optlen参数实际上是int [*](这就是4.x BSD和libc4以及libc5所具有的)。一些POSIX混淆导致了目前的socklen_t,glibc也使用它。另见accept(2)。缺陷一些套接字选项应在较低的系统级别进行处理。参见
广告
|