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)。缺陷一些套接字选项应该在较低的系统级别处理。参见
广告
|