setsockopt()函数总结

本文总结了setsockopt()函数的参数及其作用,详细解释了如何在套接字上设置选项,特别指出参数2应设为SOL_SOCKET级别。同时介绍了该函数在不同场景下的应用,并提供了相关参考资料。
摘要由CSDN通过智能技术生成
Linux所提供的socket库中存在一个bug,即不能为一个套接字重新启用同一个端口,
即使是你正常关闭该套接字以后,这是因为linux内核在一个绑定套接字的进程结束后
从不把端口标记为未用。为了解决上述问题,setsockopt和getsockopt函数就被引进
来了,当然它俩的功能不止这一点。
#include<sys/socket.h>
int setsocketopt(int socket,int level,int option_name,
				const void *option_value, size_t option_len)
int getsockopt(int sockfd,int level,int optname,
				const void *optval,socklen_t *optlen)

参数:
参数1:套接字描述符
参数2:被设置选项的级别
如果想要在套接字上设置选项,则把LEVEL 设为
SOL_SOCKET。

	level 函数使用的协议标准,可取选项为:
	SOL_SOCKET: 基本套接口
	IPPROTO_IP: IPv4套接口
	IPPROTO_IPV6: IPv6套接口
	IPPROTO_TCP: TCP套接口

参数4:指的是向setscoketopt函数设置值的地址
或者getsockopt函数所获取的值
参数5:参数4的长度 以字节计数
参数3:可选项的名称

SO_BROADCAST BOOL     		允许套接字传送广播信息
SO_DEBUG BOOL    			记录调试信息
SO_DONTLINER BOOL			不要因为数据未发送就堵塞关闭操作 设置本选项相当于将SO_LINGER的l_onoff元素置为零
SO_DONTROUTE BOOL 			禁止选径;直接传送
SO_KEEPALIVE BOOL		    发送“保持活动”包
SO_LINGER struct linger FAR*如关闭时有未发送数据,则逗留。
SO_OOBBINLINE BOOL 			在常规数据流中接收带外(Out-Of-Band)数据
SO_RCVBUF int 				为接收确定缓冲区大小
SO_REUSEADDR BOOL			允许套接口和一个已在使用中的地址捆绑
SO_SNDBUF int  				指定发送缓冲区大小
端口可重用的示例代码
s = socket(...)
BOOL isReusable=TRUE;
setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&isReusable,sizeof(BOOL));

使用场景详解

场景1closesocket(一般使用之后socket不会立即关闭而要经历TIME_WAIT的过程),
之后想要重用该socket:
则:
BOOL bReuseaddr=TRUE;
setsockopt(s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值