Linux 之 网络编程之套接字选项

SOL_SOCKET协议族选项

获取和设置套接字选项
SO_KEEPALIVE选项
SO_LINGER选项
SO_RCVBUF和SO_SNDBUF选项
SO_RCVLOWAT和SO_SNDLOWAT选项
SO_RCVTIMEO和SO_SNDTIMEO选项
SO_REUSEADDR选项

获取和设置套接字选项

getsockopt()函数和setsockopt()函数原型:
#include <sys/socket.h>
int getsockopt(int s,int level,int optname,void* optval.socklen_t* optlen);
int setsockopt(int s,int level,int optname,void* optval.socklen_t optlen);

按照参数选项界别level值的不同,套接字选项可以分为3大类:
通用套接选项:level的值为SOL_SOCKET
IP选项:level的值为IPPROTO_IP
TCP选项:level的值为IPPROTO_TCP

SO_KEEPALIVE选项

SO_KEEPALIVE保持连接选项,2小时没有数据交互,发送探测报文,有三种回应:
回应一个ACK报文
回应一个RST报文
没有任何回应

SO_KEEPALIVE使用方法:
int optval =1;
setsockopt(sockfd,SOL_SOCKET,SO_KEEPALIVE,&optval,sizeof(optval));

SO_LINGER缓冲区处理方式选项,它的操作通过一个结构体进行:
struct linger{
    int l_onoff; //开启(非0)还是关闭(0)该选项
    int l_linger; //滞留时间
};

SO_LINGER选项使用方法有三种:
    l_onoff等于0,此时SO_LINGER选项不起作用
    l_onoff不为0,l_linger为0
    l_onoff不为0,l_linger不为0

SO_LINGER使用方法:  
    optval.l_onoff  =1;
    optval.l_linger =60;setsockopt(sockfd,SOL_SOCKET,SO_LINGER,&optval,sizeof(optval));

SO_RCVBUF和SO_SNDBUF选项

SO_RCVBUF和SO_SNDBUF缓冲区大小选项:
    设置TCP/UDP连接的接收/发送缓冲区的含义
    在connect()函数调用之前设置

SO_RCVTIMEO和SO_SNDTIMEO选项

SO_RCVTIMEO表示接收超时,SO_SNDTIMEO表示发送超时,设置是通过一个结构体来实现:
    struct  timeval{
        time_t tv_sec;  
        sseconds_t tv_usec; 
    };

SO_RCVLOWAT和SO_SNDLOWAT选项

 SO_RCVLOWAT和SO_SNDLOWAT选项表示接收缓冲区和发送缓冲区的低水位标记。

SO_REUSEADDR选项

SO_REUSEADDR地址可重用选项,设置此选项可以使用被处于TIME_WAIT状态的连接占用的socket地址:

int reuse =1;
Setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse));

IPPROTO_TCP和IPPROTO_IP选项

TCP_KEEPALIVE选项
TCP_NODELAY和TCP_CORK选项
IP_TOS选项
IP_TTL选项

TCP_KEEPALIVE选项

TCP_KEEPALIVE用来获取或设置存活探测的时间间隔:

int alivetime = 60;
int fd = socket(AF_INET,SOCK_STREAM,0);
setsockopt(fd,IPPROTO_TCP,TCP_KEEPALIVE,&alivetime,sizoef(alivetime));

TCP_NODELAY和TCP_CORK选项

TCP_NODELAY和TCP_CORK针对Nagle算法,此算法的基本原理如下:
将下分组封装成大的分组再发送
使用延迟确认

TCP_NODELAY选项的作用:
    客户端的请求不需要和其他分组合并
    TCP_CORK选项的作用
    需要等到发送的数据量达到最大是,一次性发送全部数据

IP_TOS选项

服务类型选项:
IPTOS_LOWDELAY:表示最小延迟
IPTOS_RELIABILITY:表示最大可靠性
IPTOS_THROUGHPUT:表示最大吞吐量
IPTOS_LOWCOST:表示最小成本

ioctl()函数

ioctl()函数的命令选项
ioctl()函数的IO请求
ioctl()函数的文件请求
ioctl()函数的网络接口请求
ioctl()函数对ARP高速缓存操作

ioctl()函数的命令选项

ioctl()函数和协议栈交互,主要的交互类型由:
    IO
    文件
    网络接口
    路由
    ARP

ioctl()函数的IO请求

套接字IO操作的命令请求有6个,第三个参数为整形指针:
SIOCATMARK:查看TCP连接是否有带外数据
SIOCSPGRP和FIOSETOWN:处理套接字的SIGIO和SIGURG信号
SIOCGPGRP和FIOGETOWN:设置接收SIGIO信号的进程ID
SIOCGSTAMP:获取最后一个数据报达到的事件

ioctl()函数的文件请求

文件请求的命令有3个:
    FIONBIO:用于设置或清除套接字的非阻塞标志
    FIOASYNC:设置或者清除套接字的异步信号
    FIONREAD:获得当前套接字接受缓冲区的字节数

ioctl()函数的网络接口请求

获得网络接口的不同参数的不同命令选项:
SIOCGIFADDR和SIOCSIFADDR:获取和设置本地IP地址
SIOCGIFMTU和SIOCSIFMTU:获取和设置MTU
SIOCGIFHWADDR和SIOCSIFHWADDR:获取和设置硬件地址

ioctl()函数对ARP高速缓存操作

ioctl()函数获取ARP高速缓存,有三个命令字:
SIOCDARP:删除高速缓存中的一个记录
SIOCSARP:设置或者修改一个记录
SIOCGARP:获得一个记录

(未完待续……持续更新……)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流年师兄要努力りゅう

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值