news 2026/3/2 22:37:05

设置socket选项SO_REUSEADDR

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
设置socket选项SO_REUSEADDR

服务器监听socket通常会设置socket选项SO_REUSEADDR,即端口、ip可重用。代码如下:

int reuse = 1; int ret = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&reuse, sizeof(reuse));

为什么会设置这个选项呢?
先说结论:
服务器监听 socket 设置 SO_REUSEADDR,是为了解决重启服务器时,端口因 TIME_WAIT 状态被占用,导致监听失败的问题。

回答这个问题,要理解tcp的4次挥手,
第一步,主动关闭方(A),先发送FIN包,进入FIN_WAIT_1状态
第二步,被动关闭方(B),收到FIN,回复ACK包,B进入CLOSE_WAIT状态
第三步,被动关闭放(B),发送FIN包, B进入LAST_ACK状态
第四步,主动关闭放(A),收到FIN包,回复ACK包,A进入TIME_WAIT状态,通常2MSL,B收到ACK包直接关闭
第五步,2MSL超时后,A从TIME_WAIT进入CLOSED状态,端口释放。

在第四步时,端口是占用状态,新的监听socket无法绑定该端口,会失败。

选项的作用:
设置SO_REUSEADDR后,允许新的监听socket绑定处于TIME_WAIT状态的端口,让服务器能快速重启。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/1 11:33:57

演示下 一个qkv网络逐步趋向出局部加法结构的过程的每个详细的子步骤 -----来自deepseek的回答

演示下 一个qkv网络的内部权重从完全随机 到训练 【【一道小学数学应用题【学校里有2个苹果和3个梨,问学校里一共有几个水果?】这个题和答案5,代入到QKV网络里训练】后 逐步趋向出局部加法结构的过程的每个详细的子步骤 ----来自deepseek…

作者头像 李华
网站建设 2026/3/2 1:18:58

外包干了17天,技术倒退明显

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能…

作者头像 李华
网站建设 2026/3/3 7:46:57

以下7种硬件测试的种类,不知道的赶紧收藏了!

硬件产品测试的 7 大种类 信号质量测试 时序测试 功能测试 性能测试 容错测试 长时间测试 一致性测试 信号质量测试 1.信号质量测试: 信号质量测试,是很底层与直接的一项测试,需要对硬件板卡本身有相当的了解才能进行。另外,板…

作者头像 李华
网站建设 2026/2/16 16:42:45

常用API

成员变量与局部变量 包 String集合

作者头像 李华
网站建设 2026/2/14 16:34:46

Python 初级入门教程:从零开始掌握编程基础

目录 引言一、Python 简介与特点二、环境搭建与准备工作三、Python 基础语法详解3.1 变量与数据类型3.2 控制结构3.3 函数定义与使用 四、常用数据结构与操作4.1 列表操作4.2 字典操作 五、文件操作与异常处理5.1 文件操作5.2 异常处理 六、实用案例:学生成绩管理系…

作者头像 李华