可以通过 setsockopt(3SOCKET) 和 getsockopt(3SOCKET) 设置和获取多个套接字选项。例如,可以更改发送或接收缓冲区空间。这些调用的一般形式如下所示:
setsockopt(s, level, optname, optval, optlen);
和
getsockopt(s, level, optname, optval, optlen);
操作系统可以随时相应地调整这些值。
以下是 setsockopt(3SOCKET) 和 getsockopt(3SOCKET) 调用的参数:
要应用选项的套接字
指定协议级别,例如由 sys/socket.h 中的符号常量 SOL_SOCKET 指示的套接字级别
在 sys/socket.h 中定义并指定选项的符号常量
指向选项值
指向选项值的长度
对于 getsockopt(3SOCKET) 而言,optlen 是一个值结果参数。此参数最初设置为 optval 所指向的存储区域的大小。返回时,此参数的值设置为已使用的存储的长度。
当某程序需要确定现有套接字的类型时,此程序应该使用 SO_TYPE 套接字选项和 getsockopt(3SOCKET) 调用来调用 inetd(1M):
#include <sys/types.h> #include <sys/socket.h> int type, size; size = sizeof (int); if (getsockopt(s, SOL_SOCKET, SO_TYPE, (char *) &type, &size) <0) { ... }
在 getsockopt(3SOCKET) 之后,type 将设置为套接字类型的值,如 sys/socket.h 中所定义。对于数据报套接字,type 应该为 SOCK_DGRAM。