Linux Server 终止后立即重启报错 bind error: Address already in use

  • 先启动Server,再启动Client,然后使用Ctrl+C关闭Server,马上再运行Server,会得到以下结果:

    bind error: Address already in use
    
  • 这是因为,虽然Server的应用程序终止了,但TCP协议层的连接并没有完全断开,因此Server不能再监听同样的端口

  • 使用netstat命令可以查看,Server终止时,Socket描述符会自动关闭并发FIN段给Client,Client收到FIN后处于CLOSE_WAIT状态,但是Client并有终止,也没有关闭Socket描述符,因此不会发FIN给Server,最终导致Server的TCP连接处于FIN_WAIT2状态

  • 我们再使用Ctrl+C将Client终止掉,Client终止时自动关闭Socket描述符,Server的TCP连接收到Client发的FIN段后处于TIME_WAIT状态;TCP协议规定,主动关闭连接的一方要处于TIME_WAIT状态,等待两个MSL的时间后才能回到CLOSED状态,MSL在RFC1122中规定为两分钟,但各操作系统的实现不同,Linux上一般为半分钟

  • 由于我们先终止了Server,所以Server是主动关闭连接的一方,在TIME_WAIT期间仍然不能再次监听同样的Server端口

  • 在Server的TCP连接没有完全断开之前不允许重新监听是不合理的,因为前后Server占用的是同一个端口,但不一定是同一个IP地址

  • 可以通过setsockopt()设置Socket描述符的选项SO_REUSEADDR为1,表示允许创建端口号相同但IP地址不同的多个Socket描述符

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/114644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Luogu】 P4619 [SDOI2018] 旧试题

题目链接 点击打开链接 题目解法 考虑 d ( i j k ) d(ijk) d(ijk) 不好求 但我们可以转化 d ( i j k ) ∑ u ∣ i ∑ v ∣ j ∑ w ∣ k [ ( u , v ) 1 ] [ ( u , w ) 1 ] [ ( v , w ) 1 ] d(ijk)\sum\limits_{u|i}\sum\limits_{v|j}\sum\limits_{w|k}[(u,v)1][(u,w)1]…

Maven的详细介绍(maven的全据配置以及idea中maven的配置)

maven的理解 Maven 是一个强大的项目管理和构建自动化工具,它通过抽象的项目对象模型(POM:Project Object Model)和构建生命周期模型(Project Lifecycle)来对项目及其构建过程进行管理(Dependency Management System),Maven 最大化的消除了构…

Spring MVC(中)

1、Spring MVC视图: SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户 SpringMVC视图的种类很多,默认有转发视图和重定向视图 当工程引入jstl的依赖,转发视图会自动转换为JstlView …

【TensorFlow1.X】系列学习笔记【入门二】

【TensorFlow1.X】系列学习笔记【入门二】 大量经典论文的算法均采用 TF 1.x 实现, 为了阅读方便, 同时加深对实现细节的理解, 需要 TF 1.x 的知识 文章目录 【TensorFlow1.X】系列学习笔记【入门二】前言神经网络的参数神经网络的搭建前向传播反向传播 总结 前言 学习了张量、…

SpringBoot 第一个接口编写

RestController //表示该类为请求处理类public class HttpDeal {RequestMapping("/login")//这个方法处理哪一个地址过来的请求public String hello(){return "返回给浏览器";}}

测试Android webview 加载本地html

最近开发一个需要未联网功能的App, 不熟悉使用Java原生开发界面,于是想使用本地H5做界面,本文测试了使用本地html加载远程数据。直接上代码: MainActivity.java package com.alex.webviewlocal;import androidx.appcompat.app.AppCompatAct…

空值合并运算符(??)及其使用场景

空值合并操作符(??) 是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。 与逻辑或操作符(||) 不同,逻辑或操作符会在左侧操作数为…

DataGridView的下拉DataGridViewComboBoxColumn的数据绑定问题

DataGridView的下拉DataGridViewComboBoxColumn的数据绑定问题 需求:左边这列固定x行,右边显示下拉,并且赋上默认值 public void Set(){// 添加需要固定显示的行数dataGridView1.Rows.Add("早班";dataGridView1.Rows.Add("中…

小团队之间有哪些好用免费的多人协同办公软件

在小团队协作中,选择适合的多人协同办公软件是提高工作效率和团队协作的重要一环。幸运的是,市场上有许多大多数功能都免费的多人协同办公软件,为小团队提供了强大的协作功能和便捷的工作环境。 在本文中,我将根据自己多年的在线…

[C++] C++入门

☃️个人主页:fighting小泽 🌸作者简介:目前正在学习C和Linux 🌼博客专栏:C入门 🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪🏻 …

Cesium Vue(六)— 材质(Material)

1. 设置entity材质 添加棋盘纹理材质 // 棋盘纹理 let material new Cesium.CheckerboardMaterialProperty({ evenColor: Cesium.Color.RED, oddColor: Cesium.Color.YELLOW, repeat: new Cesium.Cartesian2(2, 2), });添加条纹纹理材质 // 条纹纹理 let material new Cesium…

Java利用反射和读取xml实现迷你容器

由于需要框架能实现多态,达到控制反转解耦。所以容器还是需要的,容器的存在可以简化对象获取工作,但是容器也不是万能的。合理使用即可,Spring对我来说太庞大了,用不着,为此给框架写一个迷你版容器。 容器…

Qt中Json的操作

在 Json的两种格式中介绍了Json的格式以及应用场景。由于这种数据格式与语言无关,下面介绍一下Json在Qt中的使用。 从Qt 5.0开始提供了对Json的支持,我们可以直接使用Qt提供的Json类进行数据的组织和解析。相关的类常用的主要有四个,具体如下: Json类介绍 QJsonDocument |…

OpenAI接口开发指南

OpenAI主要API OpenAI Api 官方地址为:https://platform.openai.com/docs/api-reference,常用的 OpenAI Api 接口总共分为 4 类:对话类、私有化模型训练类、通用类、图片 & 音频类,其中对话类与私有化模型训练类是最常用的。…

【vSphere 8 自签名证书】企业 CA 签名证书替换 vSphere Machine SSL 证书Ⅰ—— 生成 CSR

目录 替换拓扑图证书关系示意图说明 & 关联博文 1. 默认证书截图2. 使用certificate-manager生成CSR2.1 创建存放CSR的目录2.2 记录PNID和IP2.3 生成CSR2.4 验证CSR 参考资料 替换拓扑图 证书关系示意图 默认情况下,VMCA 与 Machine SSL的关系是 本系列博文要…

UE5--物体卡片与材质入门

参考资料: 《Unreal Engine5 入门到精通》--左央 虚幻引擎5.2文档:https://docs.unrealengine.com/5.2/zh-CN/ 前言: 跟着左央老师的《Unreal Engine5 入门到精通》学习制作AI版胡闹厨房,把学习过程与学习到的东西归纳总结起来。 …

Ruby 之 csv 文件读写

csv 文件写入 require csvtitle ["col1", "col2"] contents [["row11", "row12"], ["row21", "row22"]]csv1 CSV.open("test1.csv", "wb") do |csv|# write file titlecsv << titl…

【网络协议】聊聊网关 NAT机制

再宿舍的时候&#xff0c;其实只能通过局域网进行处理&#xff0c;但是如果接入互联网&#xff0c;一般是配置路由器当然还有网关。 MAC头和IP头的细节 一旦配置了IP地址和网关&#xff0c;就可以制定目标地址进行访问。 MAC头主要信息目标和源MAC地址&#xff0c;以及协议类…

OpenCV显示中文(python)

OpenCV添加文字的方法putText(…)&#xff0c;添加英文是没有问题的&#xff0c;但如果你要添加中文就会出现“&#xff1f;&#xff1f;&#xff1f;”的乱码&#xff0c;需要特殊处理一下。 下文提供封装好的&#xff08;代码&#xff09;方法&#xff0c;供OpenCV添加中文使…

hive substr用法

hive substr用法 substr(string A, int start, int len) 其中start大於0&#xff0c;表示從前往后取數據&#xff0c;start小於0&#xff0c;表示從後往前取數據 if(matnr like 0000000000%, substring(matnr, -8), matnr) matnr,取倒數8個數 if(matnr like 0000000000%, subs…