news 2026/5/15 12:36:40

设置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/5/3 4:33:46

ollama部署embeddinggemma-300m:300M参数模型如何实现媲美大模型的语义精度

ollama部署embeddinggemma-300m:300M参数模型如何实现媲美大模型的语义精度 你有没有试过在自己的笔记本上跑一个真正好用的嵌入模型?不是那种动辄几十GB显存、需要专业GPU服务器才能启动的庞然大物,而是——开箱即用、秒级响应、不卡顿、不…

作者头像 李华
网站建设 2026/5/13 12:52:41

MusePublic Art Studio效果实测:长尾提示词对复杂场景理解能力

MusePublic Art Studio效果实测:长尾提示词对复杂场景理解能力 1. 这不是又一个“点点点”生成器,而是一支会思考的画笔 你有没有试过这样写提示词:“一位穿靛蓝工装裤的女建筑师站在未完工的混凝土建筑工地中央,左手拿着激光测…

作者头像 李华
网站建设 2026/5/12 7:49:52

实测CTC语音唤醒模型:93%准确率的‘小云小云‘识别

实测CTC语音唤醒模型:93%准确率的小云小云识别 1. 这不是实验室里的Demo,是能装进手机的真家伙 你有没有过这样的体验:对着手机说“小云小云”,等了两秒,屏幕才慢悠悠亮起来?或者在嘈杂的厨房里喊了三遍&…

作者头像 李华
网站建设 2026/5/13 10:39:12

从零搭建完整python自动化测试框架logging日志模块详解

前言 logging: 看作一个办公室 logger: 看作办公室的一台打印机 FileHandler: 看作薄文件纸 StreamHandler: 看作厚文件纸 认识了以上几个东西,就好办了,要写日志,就是要打印文件,先从办公室获取打印机,再从办公室…

作者头像 李华
网站建设 2026/5/10 20:00:58

Python自动化测试 APP自动化测试最全教程,玩转自动化测试

前言 随着移动终端的普及,手机App应用越来越多,也越来越重要。而作为测试袁的我们也要与时俱进,努力学习手机App的相关测试。 自动化测试主要分为三层:UI层、接口层、单元层。 移动端、web端通常所说的自动化测试是指UI层测试。…

作者头像 李华