#include <sys/socket.h>
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
函数 setsockopt 原型分析:
- 此函数成功时返回 0,失败时返回-1 并设置错误号;
- 参数 s 是套接字(socket 函数返回);
- 参数 level 是选项等级如表 1 所示;
- 参数 optname 是选项名如表 1 所示;
- 参数 optval 是选项值;
- 参数 optlen 是选项长度。
#include <sys/socket.h>
int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
函数 getsockopt 原型分析:
- 此函数成功返回 0,失败返回-1 并设置错误号;
- 参数 s 是套接字(socket 函数返回);
- 参数 level 是选项等级如表 1 所示;
- 参数 optname 是选项名如表 1 所示;
- 输出参数 optval 返回选项值;
- 参数 optlen 是选项长度。
表 1 套接字选项列表
选项等级 | 选项名 | 说明 | 数据类型 |
SOL_SOCKET | SO_BROADCAST SO_ERROR SO_KEEPALIVE SO_LINGER SO_DONTLINGER SO_RCVBUF SO_RCVTIMEO SO_SNDTIMEO SO_REUSEADDR SO_REUSEPORT SO_TYPE SO_CONTIMEO | 运行发送广播数据报 获取待处理错误并消除 周期性测试连接是否存活 若有数据待发送则延迟关闭 关闭 SO_LINGER 选项 接受缓冲区大小 接受超时 发送超时 允许重用本地地址 允许重用本地端口 取得套接字类型 连接超时 | int int int struct linger int int struct timeval struct timeval int int int struct timeval |
SOL_PACKET | PACKET_ADD_MEMBERSHIP PACKET_DROP_MEMBERSHIP PACKET_RECV_OUTPUT PACKET_RX_RING PACKET_VERSION PACKET_RESERVE | 加入多播组 离开多播组 是否接收输出数据包 为 mmap 分配内存空间设置 AF_PACKET 版本 为 mmap 分配空间保留额外的头部空间 | struct packet_mreq struct packet_mreq int struct tpacket_req int unsigned int |
IPPROTO_IP | IP_TOS IP_TTL IP_MULTICAST_IF IP_MULTICAST_TTL IP_MULTICAST_LOOP IP_ADD_MEMBERSHIP IP_DROP_MEMBERSHIP | 服务类型和优先级 存活时间 指定外出接口 指定外出 TTL 指定是否回馈 加入多播组 离开多播组 | int int struct in_addr unsigned char unsigned char struct in_mreq struct in_mreq |
IPPROTO_TCP | TCP_KEEPALIVE TCP_ KEEPIDLE TCP_ KEEPINTVL TCP_ KEEPCNT | 控测对方是否存活前连接闲置秒数 对一个连接探测前的允许时间 两个探测的时间间隔 探测的最大次数 | int int int int |
IPPROTO_IPV6 | IPV6_V6ONLY | 只允许 IPV6(SylixOS 不支持数据报通信) | int |
IPPROTO_UDPLITE | UDPLITE_SEND_CSCOV UDPLITE_RECV_CSCOV | 执行发送校验和 执行接收校验和 | int int |
IPPROTO_RAW | IPV6_CHECKSUM | IPV6 校验和 | int |