setsockopt 函数使用及选项介绍

套接字选项通过调用 setsockopt 函数和 getsockopt 函数进行操作,套接字选项如表 1 所示。
#include 
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);

函数 setsockopt 原型分析:

  • 此函数成功时返回 0,失败时返回-1 并设置错误号;
  • 参数 s 是套接字(socket 函数返回);
  • 参数 level 是选项等级如表 所示;
  • 参数 optname 是选项名如表 所示;
  • 参数 optval 是选项值;
  • 参数 optlen 是选项长度。
通过调用 setsockopt 函数来设置不同选项等级的不同选项,参数 optval 是一个指向变量的指针类型,根据不同的选项,类型也不同如表 所示。
#include 
int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);

函数 getsockopt 原型分析:

  • 此函数成功返回 0,失败返回-1 并设置错误号;
  • 参数 s 是套接字(socket 函数返回);
  • 参数 level 是选项等级如表 所示;
  • 参数 optname 是选项名如表 所示;
  • 输出参数 optval 返回选项值;
  • 参数 optlen 是选项长度。
调用 getsockopt 函数可以获得套接字的选项值,参数 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

SOL_PACKET 选项等级用于 AF_PACKET 类型套接字的选项,这些选项将在下一篇文章中 详细介绍:

你可能感兴趣的:(计算机网络,socket,setsockopt,网络)