获取套接字选项:
int getsockopt(SOCKET sockfd, int level, int optname, char *optval, int *optlen);
设置套接字选项
int setsockopt(SOCKET sockfd, int level, int optname, const char *optval, int optlen);
sockfd(套接字):一个标识套接口的描述字;
level(级别):选项定义的层次;
SOL_SOCKET:基本套接口
IPPROTO_IP:IPv4套接口
IPPROTO_IPV6:IPv6套接口
IPPROTO_TCP:TCP套接口
optname(选项名):选项名称
optval(选项值):指向存放选项值的缓冲区
optlen(选项值长度):存放选项值的缓冲区的长度(对于getsockopt函数,这是一个int型指针,对于setsockopt函数,这是一个int值)
选项 | 类型 | 意义 | 级别 | getsockopt()支持 | setsockopt()支持 |
---|---|---|---|---|---|
IP_OPTIONS | IP头中选项 | IPPROTO_IP/IPPROTO_IPv6 | 否 | 否 | |
SO_DEBUG | BOOL | 记录调试信息 | SOL_SOCKET | 是 | 是 |
SO_ACCEPTCONN | BOOL | 套接口在监听 | SOL_SOCKET | 是 | 否 |
SO_REUSEADDR | BOOL | 允许套接口和一个正在使用中的地址捆绑 | SOL_SOCKET | 是 | 是 |
SO_KEEPALIVE | BOOL | 发送“保持活动”信息 | SOL_SOCKET | 是 | 是 |
SO_DONTROUTE | BOOL | 禁止选径;直接传送 | SOL_SOCKET | 是 | 是 |
SO_BROADCAST | BOOL | 允许套接口传送广播信息 | SOL_SOCKET | 是 | 是 |
SO_USELOOPBACK | |||||
SO_LINGER | struct linger FAR* | linger选项(对closesocket()有影响) | SOL_SOCKET | 是 | 是 |
SO_OOBINLINE | BOOL | 在常规数据流中接收带外数据 | SOL_SOCKET | 是 | 是 |
SO_DONTLINGER | BOOL | 若为真,则SO_LINGER选项被禁止 | SOL_SOCKET | 是 | 是 |
SO_EXCLUSIVEADDRUSE | |||||
SO_SNDBUF | int | 发送缓冲区大小 | SOL_SOCKET | 是 | 是 |
SO_RCVBUF | int | 接收缓冲区大小 | SOL_SOCKET | 是 | 是 |
SO_SNDLOWAT | int | 发送低级水印 | 否 | 否 | |
SO_RCVLOWAT | int | 接收低级水印 | 否 | 否 | |
SO_SNDTIMEO | int | 发送超时 | 否 | 否 | |
SO_RCVTIMEO | int | 接收超时 | 否 | 否 | |
SO_ERROR | int | 获取错误状态并清除 | SOL_SOCKET | 是 | 否 |
SO_TYPE | int | 套接口类型(如SOCK_STREAM) | SOL_SOCKET | 是 | 否 |