setsockopt()函数详解

setsockopt()函数详解

函数原型:

int setsockopt(int sockfd , int level, int optname, void *optval, socklen_t *optlen);

函数功能:设置套接字描述符的属性。

参数:

sockfd:要设置的套接字描述符。

level:选项定义的层次。或为特定协议的代码(如IPv4,IPv6,TCP,SCTP),或为通用套接字代码(SOL_SOCKET)。

optname:选项名。level对应的选项,一个level对应多个选项,不同选项对应不同功能。

optval:指向某个变量的指针,该变量是要设置新值的缓冲区。可以是一个结构体,也可以是普通变量

optlen:optval的长度。

关于optname的可选项,根据你需要的功能进行设置,下面是该参数的一些例举,来自unix网络编程。技术上的书是拿来查的,不是读,不然永远读不完。我们针对不同需求去查阅即可。

当level为SOL_SOCKET时,optname可以有以下选项(一部分)

SO_BROADCAST 允许发送广播数据 int

SO_DEBUG 允许调试 int

SO_LINGER 延迟关闭连接 struct linger

SO_OOBINLINE 带外数据放入正常数据流 int

SO_RCVBUF 接收缓冲区大小 int

SO_SNDBUF 发送缓冲区大小 int

SO_RCVLOWAT 接收缓冲区下限 int

SO_SNDLOWAT 发送缓冲区下限 int

SO_RCVTIMEO 接收超时 struct timeval

SO_SNDTIMEO 发送超时 struct timeval

当level为IPPROTO_IP时,optname可以有以下选项(一部分)

IP_HDRINCL 在数据包中包含IP首部 int

IP_OPTINOS IP首部选项 int

IP_TTL 生存时间 int

当level为IPPRO_TCP时,optname可以有以下选项(一部分)

TCP_MAXSEG TCP最大数据段的大小 int

TCP_NODELAY 不使用Nagle算法 int

返回值:

成功时返回0,失败时返回-1。

例子:

#include "unp.h"

#include /* for TCP_MAXSEG value */

int

main(int argc, char **argv)

{

int sockfd, mss, sendbuff;

socklen_t optlen;

sockfd = Socket(AF_INET, SOCK_STREAM, 0);

/* Fetch and print the TCP maximum segment size. */

optlen = sizeof(mss);

Getsockopt(sockfd, IPPROTO_TCP, TCP_MAXSEG, &mss, &optlen);

printf("TCP mss = %d\n", mss);

/* Set the send buffer size, then fetch it and print its value. */

sendbuff = 65536;

Setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, sizeof(sendbuff));

optlen = sizeof(sendbuff);

Getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen);

printf("send buffer size = %d\n", sendbuff);

exit(0);

}

该例子中

Setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff,sizeof(sendbuff));

层次level使用的是通用套接字代码(SOL_SOCKET)

选项名optname是SO_SNDBUF,用来设置发送缓冲区大小,不同选项设置的内容不同。

optval是自己设置的一个值。

optlen是该值的数据长度

还有一些常用的用法,可以参考百度百科的应用举例:https://baike.baidu.com/item/setsockopt/10069288?fr=aladdin

相关推荐

sugram聊天软件
上海365彩票

sugram聊天软件

📅 08-26 👁️ 2466
华为无线网卡使用教程 华为网卡设置,华为无线上网卡和无线路由器如何设置
提升制造业精度与效率的三维尺寸测量软件选择指南
大字开头的成语190个
上海365彩票

大字开头的成语190个

📅 07-19 👁️ 9296
为什么喜欢看玄幻小说
上海365彩票

为什么喜欢看玄幻小说

📅 08-05 👁️ 5340
官博意思
26365

官博意思

📅 08-06 👁️ 1819