博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UNIX网络编程卷1:套接字联网-第7章:套接字选项
阅读量:4212 次
发布时间:2019-05-26

本文共 1519 字,大约阅读时间需要 5 分钟。

1.套接字选项是干嘛的

其实理解个大概就行,套接字选项可以看成就是套接字属性,通过设置套接字选项可以开启或关闭一些功能。可以理解为对套接字的某些细化操作已经被封装,他的接口

就是套接字选项,我们通过设置套接字选项来细化控制套接字的某些属性和功能。针对某些特定协议,可能有特定的套接字,所以套接字选项可以分类为通用、ipv4、

ipv6、tcp、sctp等

2.常见的套接字选项详解

此处只列举我认为常见的,具体套接字选项可以查看相关手册

SO_KEEPALIVE套接字选项

之前我有篇提到过,tcp探测连接的两种方式,其中有一种就是设置tcp套接字选项SO_KEEPALIVE选项,具体情况参见我之前的讲解。

SO_RECVBUF和SO_SNDBUF套接字选项

每个套接字都有一个发送缓冲区和一个接收缓冲区。这两个套接字选项允许我们改变这两个缓冲区的默认大小。

SO_LINGER套接字选项

结合shutdown和close函数使用,可以精确对套接字发送和接收缓冲区中残余数据的处理和关闭的具体流程。(很多种小情况,读者先需要整体过一遍,但肯定是无法硬记下来,知道是干什么的,然后在需要时去查询资料及可)

SO_REUSEADDRSO_REUSEPORT套接字选项

有4个不同的功用:

 1.允许启动一个监听服务器并捆绑其众说周知的端口,即使以前建立的将该端口作为他们的本地端口的连接仍然存在

所有TCP服务器都应该指定本套接字选项,以防止一下情况

    a)启动一个监听服务器

    b)连接请求到达,派生一个子进程来处理这个客户

    c)监听服务器终止,但子进程继续为现有连接上的客户提供服务

    d )重启动监听服务器

在默认情况下,如果没有设定这个套接字选项,服务器重启(调用bind时会返回错误)。(这种情况最常见)

2.SO_REUSEADDR允许在同一端口启动同一服务的多个实例,只要每个实例捆绑一个不同的本地ip地址即可

3.略

4.略

3.怎么获取和设置套接字选项

fcntl函数解析

#include
int fcntl(int fd,int cmd,.../*int arg*/);//返回:若成功则取决于cmd,若出错则为-1
fcntl的作用:fcntl()用来操作的一些特性。fcntl 不仅可以施加建议性锁,还可以施加强制锁。同时,fcntl还能对文件的某一记录进行上锁,也就是记录锁。

fd:参数fd代表欲设置的文件描述符

cmd:数cmd代表打算操作的指令

fcntl函数提供的网络编程相关特性:

1.非阻塞式I/O

2.信号驱动式I/O

3.F_SETOWN命令允许我们指定用于接收SIGIO和SIGURG信号的套接字属主

每种描述符(包括套接字描述符)都有一组F_GETFL命令获取或由F_SETFL命令设置的文件标志,其中:

O_NONBLOCK------------非阻塞式I/O

O_ASYNC-------------------信号驱动式I/O

重点:设置某个文件状态表示的唯一正确方法:先取得当前标志,与新标志逻辑或后再设置标志

开启非阻塞式I/O的代码实例:

int flags;if((flags = fcntl(fd,F_GETFL,0)) < 0)   err_sys("F_GETFL error");flags |= O_NONBLOCK; /*如果要关闭非阻塞,flags &= ~O_NONBLOCK;*/ if(flags = fcntl(fd,F_SETFL,flags) <0)   err_sys("F_SETFL error");

posix推荐fcntl方法

转载地址:http://pnumi.baihongyu.com/

你可能感兴趣的文章
Linux Kernel Boot CMDLINE Processing
查看>>
字符杂项设备(miscdevice)
查看>>
bootloader-bootable解析
查看>>
bootloader (LK)&&android lk bootloader中相关修改指南
查看>>
SD卡驱动分析--基于高通平台
查看>>
SD Card 驱动流程分析
查看>>
Linux之debugfs介绍
查看>>
Linux DebugFS 子目录也是用debugfs_create_dir来实现
查看>>
关于sd卡中一些概念的理解
查看>>
SD卡图形介绍
查看>>
linux MISC 驱动模型分析
查看>>
马达 vibrator的android的timed_output实现方式
查看>>
linux kernel panic解决思路
查看>>
定位Oops的具体代码行分析死机日志的方法
查看>>
Linux kernel oops panic 调试技巧
查看>>
sd是否在位检查
查看>>
关于USB Gadget开发
查看>>
tofel词汇
查看>>
jellybean的suspend策略变动
查看>>
Android linux的休眠和唤醒
查看>>