获取和设置影响套接字的三种方式
- getsockopt 和 setsockopt 函数和
- fcntl 函数 (file control)
- ioctl (IO control)
getsockopt 和 setsockopt 函数
这两个函数仅用于套接字
#include <sys/socket.h>
/**
* 获取一个打开的套接字的选项
*
* @param sockfd 必须指向一个打开的套接字描述符
* @param level 级别
* @param optname 选项名
* @param optval 指向一个变量的指针,用于接收函数的结果,其长度由最后一个长度限定
* @param optlen 这是一个Value-Result参数,传入时限定optval的最大长度,防止缓存溢出
* 函数执行结束时,可以通过这个参数知道内核究竟往optval写了多少数据
* @return 成返回0,出错返回-1
*/
int getsockopt(int sockfd, int level, itn optname, void *optval,
socklen_t *optlen);
/**
* 设置一个打开的套接字的选项
*
* @param sockfd 必须指向一个打开的套接字描述符
* @param level 级别
* @param optname 选项名
* @param optval 指向一个变量的指针,用于向函数传递要设置的值,其长度由最后一个长度限定
* @param optlen 指示了optval的长度
* @return 成返回0,出错返回-1
*/
int setsockopt(int sockfd, int level, int optname, const void *optval,
socklen_t optlen);
IPv4 套接字选项
下面几个选项的等级(level)均为 IPROTO_IP
-
IP_HDRINCL
- 可以为一个原始套接字设置该选项,设置以后可以自己构造 IP 首部(即在往里面写数据的时候是从 IP 包的首部起始位置开始写)
-
IP_OPTIONS
- 该选项允许我们在 IPv4 中设置 IP 选项
-
IP_RECVDSTADDR
- 该套接字选项导致所收到的 UDP 数据报的目的 IP 地址由 recvmsg 函数作为辅助数据返回
-
IP_RECVIF
- 该套接字选项导致所收到的 UDP 数据包的接收接口索引有 recvmsg 函数作为辅助数据返回
-
IP_TOS
- 该套接字选项允许我们为 TCP、UDP 或 SCTP 套接字设置 IP 首部中的服务类型字段
-
IP_TTL
- 我们可以使用本选项设置或获取系统改用在从某个给定套接字发送的单薄分组上的默认 TTL 值
网友评论