4.24、半关闭、端口复用

news/2024/12/23 4:04:19/

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

4.24、半关闭、端口复用

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

1.半关闭

TCP 链接中 A B 发送 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协议

http://www.ppmy.cn/news/48408.html

相关文章

Java最新面试题100道,包含答案示例(1-10题)

1. Java 中什么是 JVM&#xff1f; JVM&#xff08;Java Virtual Machine&#xff09;即 Java 虚拟机&#xff0c;是一种能够在不同平台上运行 Java 程序的虚拟计算机。JVM 是 Java 的核心组成部分&#xff0c;它负责解释 Java 代码并将其转换成可执行的二进制字节码指令&…

13.弹出层.下

学习要点&#xff1a; 1. 基础参数 本节课我们来开始了解 Layui 的内置模块&#xff1a;弹出层的方法演示。 一&#xff0e;基础参数 1. 参数&#xff0c;我们主要通过 open 方法来演示&#xff0c;其它方法类似&#xff1b; layer . open ({ // 标题 title : 标…

004+limou+C语言链表之“有头双向有循环链表”的实现

0、前要 如果您是初步认识链表&#xff0c;或是不能完全“手撕”一个简单的单链表&#xff0c;可以看看我的上一篇有关“无头单向非循环链表”的实现&#xff0c;再来看这一篇文章 1、“有头双向有循环链表”的实现 &#xff08;0&#xff09;首先阐述两个节点的区别 头节点…

PostMan笔记(三)自动化测试

1. 简介 Postman是一款功能强大的API开发工具&#xff0c;也是一款流行的自动化测试工具。它提供了多种测试功能&#xff0c;包括测试脚本、预请求脚本和测试集合等。 1.1 测试脚本 测试脚本是Postman中用于自动化测试的核心部分。它可以使用JavaScript语言编写&#xff0c;…

WuThreat身份安全云-TVD每日漏洞情报-2023-04-19

漏洞名称:vm2 沙箱逃逸漏洞 漏洞级别:严重 漏洞编号:CVE-2023-29199,CNNVD-202304-1191 相关涉及:vm2 3.9.16 之前版本 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-09144 漏洞名称:Linux 内核蓝牙子系统中存在 RCE 漏洞 漏洞级别:高危 漏洞…

LDMUI-001 61320946C模拟量模件的40端即直流24伏的负端接至逻辑地汇流排上

LDMUI-001 61320946C模拟量模件的40端即直流24伏的负端接至逻辑地汇流排上 ​ 八、现场接地常用注意事项 1.现场控制站 接地螺丝因机柜本体与底座间有胶皮形成绝缘&#xff0c;屏蔽地汇流排与底座间绝缘&#xff0c;现场控制站必须按规定做好接地处理。即分别接至现场控制站接…

#Chrome扩展程序开发教程--07:消息传递

#Chrome扩展程序开发教程--07&#xff1a;消息传递 引言1、基本介绍2、简单通信3、长时间通信4、其它通信4.1、Cross-extension messaging4.2、Sending messages from web pages4.3、Native messaging 引言 本系列博客旨在带来最新的Chrome扩展程序开发入门教程。 1、基本介绍 …

2023-03-18青少年软件编程(C语言)等级考试试卷(四级)解析

2023-03-18青少年软件编程(C语言)等级考试试卷(四级)解析T1、最佳路径 如下所示的由正整数数字构成的三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。你的…