部分重要的SOCKET选项

本文详细介绍了几个重要的SOCKET选项,包括SO_REUSEADDR、SO_RCVBUF和SO_SNDBUF、SO_RCVLOWAT和SO_SNDLOWAT、SO_LINGER以及SO_KEEPALIVE。讨论了它们的作用,如允许端口复用、调整缓冲区大小、低水位标记的设定和保持连接的检测。还提到了如何通过setsockopt()和getsockopt()系统调用来设置这些选项,并分享了内核参数的调整方法。
摘要由CSDN通过智能技术生成

  首先介绍两个专门用来读取和设置socket文件描述符属性的系统调用

getsockopt() && setsockopt()

函数原形

//读取socket文件描述符的属性
int getsockopt(int sockfd , int level , int option_name , void* option_value , socklen_t* restrict option_len);
//设置socket文件描述符的属性
int setsockopt(int sockfd , int level , int option_name , const void* option_value , socklen_t option_len)

参数
①、sockfd:
  指定被操作的目标socket
②、level:
  指定要操作哪个协议的选项,比如IPV4,IPV6、TCP等。
③、option_name:
  指定选项的名字
④、option_value: 
  对于getsockopt()来说,指向返回选项值的缓冲。
  对于setsockopt(),指向包含新选项值的缓冲。
④、option_len: 
  对于getsockopt()来说,作为入口参数时,选项值的最大长度。作为出口参数时,选值的实际长度。
  对于setsockopt(),现选项的长度。

返回值
成功时返回0,失败时返回-1,并设置errno。

socket选项表

这里写图片描述
注意
  对于服务器而言,部分socket选项只能在调用listen之前针对监听socket设置才有效。这是因为连接socket只能由accept调用返回,而accept从listen监听队列中获取的连接是已经完成三次握手的,这说明服务器已经想被接受的链接上发送出了TCP同步报文段。但有的socket选项却应该在TCP同步报文段中设置(比如:TCP的最大报文段)。
  对于这种情况,应该对监听socket设置这些选项,那么accept返回的连接socket将自动继承这些选项。这些选项包括:SO_DEBUG , SO_DONTROUTE , SO_KEEPA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值