UNIX网络编程卷1:套接字联网API(第3版) 等文件(提取码:q99x)

4.24、半关闭、端口复用

  • 1.半关闭
  • 2.端口复用

1.半关闭

TCP 链接中 AB 发送 FIN 请求关闭,另一端 B 回应 ACK 之后(A 端进入 FIN_WAIT_2 状态),并没有立即发送 FINAA 方处于半连接状态(半开关),此时 A 可以接收 B 发送的数据,但是 A 已经不能再向 B 发送数据。

  • 从程序的角度,可以使用 API 来控制实现半连接状态:
#include <sys/socket.h>
int shutdown(int sockfd, int how);sockfd: 需要关闭的socket的描述符how: 允许为shutdown操作选择以下几种方式:SHUT_RD(0): 关闭sockfd上的读功能,此选项将不允许sockfd进行读操作。该套接字不再接收数据,任何当前在套接字接受缓冲区的数据将被无声的丢弃掉。SHUT_WR(1): 关闭sockfd的写功能,此选项将不允许sockfd进行写操作。进程不能在对此套接字发出写操作。SHUT_RDWR(2):关闭sockfd的读写功能。相当于调用shutdown两次:首先是以SHUT_RD,然后以SHUT_WR。

使用 close 中止一个连接,但它只是减少描述符的引用计数,并不直接关闭连接,只有当描述符的引用计数为 0 时才关闭连接。shutdown 不考虑描述符的引用计数,直接关闭描述符。也可选择中止一个方向的连接,只中止读或只中止写。

  • 注意:

    1. 如果有多个进程共享一个套接字,close 每被调用一次,计数减 1 ,直到计数为 0 时,也就是所用进程都调用了 close,套接字将被释放。
    2. 在多进程中如果一个进程调用了 shutdown(sfd, SHUT_RDWR) 后,其它的进程将无法进行通信。但如果一个进程 close(sfd) 将不会影响到其它进程。

2.端口复用

端口复用最常用的用途是:

  • 防止服务器重启时之前绑定的端口还未释放
  • 程序突然退出而系统没有释放端口
#include <sys/types.h>
#include <sys/socket.h>
// 设置套接字的属性(不仅仅能设置端口复用)
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);参数:- sockfd : 要操作的文件描述符- level : 级别 - SOL_SOCKET (端口复用的级别)- optname : 选项的名称- SO_REUSEADDR- SO_REUSEPORT- optval : 端口复用的值(整形)- 1 : 可以复用- 0 : 不可以复用- optlen : optval参数的大小端口复用,设置的时机是在服务器绑定端口之前。
setsockopt();
bind();
  • 常看网络相关信息的命令
    netstat
    参数:

    • -a 所有的socket
    • -p 显示正在使用 socket 的程序的名称
    • -n 直接使用 IP 地址,而不通过域名服务器
    • -l 正在进行监听
    • -t 使用TCP协议
    • -u 使用UDP协议

4.24、半关闭、端口复用相关推荐

  1. workerman 端口复用作用

    短连接:需要开启端口复用,比如 web-server, 频繁拿连接. 长连接:不需要开启端口复用,不同子进程只需要去backlog 队列一次连接就行. 测试代码: <?php require _ ...

  2. 端口复用和半关闭补充

    端口复用: int opt=1 : //设置端口复用 setsockopt(lfd,SOL_SOCKET,SO_REUSERADDR,(void *)&opt,sizeof(opt)); 半关 ...

  3. TCP状态转换、半关闭、端口复用

    目录 1.TCP状态转换 1.1 三次握手 1.2 四次挥手 1.3 状态转换 1.4 相关命令 2.半关闭 3.端口复用 1.TCP状态转换 在 TCP 进行三次握手,或者四次挥手的过程中,通信的服 ...

  4. 29.Linux网络编程熟练掌握 TCP 状态张换图熟练堂握端口复用的方法了解半关闭的概念和实现方式了解多路10 转接模型熟练掌握 select 函数的使用熟练使用 fdset 相关函数的使用能够编写

    把昨天的 第二天的内容说一下,复习一下,第二天 讲的东西不算多,但是有两个作业题来写一写, 大致浏览一下,三次握手 四次挥手的过程,大家有没有画一下? 能画出来吗?同学们,大家注意 这个写代码的时候其 ...

  5. 第4章 Linux网络编程 24.端口复用

    目录 端口复用 查看网络相关信息的命令 端口复用 端口复用最常用的用途是: 防止服务器重启时之前绑定的端口还未释放 (2msl) 程序突然退出而系统没有释放端口 查看网络相关信息的命令 netstat ...

  6. 端口复用(解决C/S模型的BUG)

    在上篇文章中介绍了TCP 的状态转换,现在看之前C/S通信代码的BUG: (1)如果服务器作为主动方,先调用 close,服务器会进入 FIN_WAIT_2(半关闭状态): (2)客户端调用 clos ...

  7. linux网路编程之TCP状态转换及端口复用

    (1)TCP状态转换图 其中图中分为三种状态:实线代表的主动发起连接,虚线代表的被动发起连接,细实线代表的可以双向发起连接的状态. 主动发起连接方状态变化:1)主动发起连接的一方发送SYN标志位,进入 ...

  8. 网络基础4(TCP三次握手,四次握手,TCP流量控制,TCP状态转换 , TCP异常断开,设置TCP属性,端口复用)

    TCP协议 TCP通信时序 下图是一次TCP通讯的时序图.TCP连接建立断开.包含大家熟知的三次握手和四次握手. TCP通讯时序 在这个例子中,首先客户端主动发起连接.发送请求,然后服务器端响应请求, ...

  9. iptables实现端口复用

    iptables实现端口复用 1.端口复用的概念 2.基于iptables的端口复用 2.0 前置概念 2.0.1 iptables自定义链 2.0.2 iptables recent模块使用 2.1 ...

最新文章

  1. 自然语言处理深度学习篇-BiLSTM文本挖掘实践 命名实体识别
  2. 区块链技术特点之去中心化特性
  3. R语言合并两个或多个有序数dataframe实战(dataframe的纵向合并):使用R原生方法、data.table、dplyr等方案
  4. Android优化五:布局优化
  5. python3 对象与json相互转换
  6. Pytorch中矩阵用sum()函数求和降维是怎么回事
  7. DL之SqueezeNet:SqueezeNet算法的架构详解
  8. QDoc文字标记textmarkup
  9. html(4)标签form表单——基础
  10. 光落在你脸上,可爱一如往常
  11. sqlalchemy in查询优化_SQL高级:代码实战 SQL 单表优化
  12. idea开启自动热部署自动化devtools
  13. 又一北大系AI公司浮出水面,百炼智能宣布获千万元天使投资
  14. Avoiding GREEDYDATA for logstash'grok
  15. 空间分析——SatScan软件简明教程
  16. 判断用户端有无安装flash插件并返回对应播放器选项提示
  17. 基于51单片机的红外接收
  18. 月薪过万的java程序员需要什么能力_什么样能力的Java程序员月薪过万
  19. 编辑网页document.body.contentEditable=‘true‘;
  20. php实现智能音箱播放内容,智能音箱应用分析 智能音箱五大功能介绍

热门文章

  1. 十进制转换为二、十六进制的方法
  2. “富强“, “民主“, “文明“, “和谐“, “自由“, “平等“, “公正“, “法治“, “爱国“, “敬业“, “诚信“, “友善“
  3. 【容器化】浅析容器化以及容器编排
  4. linux之文件搜索和文件内容搜索
  5. EXCEL中插入图形
  6. Sequence to Sequence – Video to Text 论文翻译
  7. 无位置传感器的电机控制
  8. 人工智能的影响是大众还是小众,对我们的职业有什么影响?
  9. 上大学的四年---以此结束四年的时光
  10. php 正则筛选靓号如AABBCC(连对),abcdef(顺子)等QQ靓号保留