[Socket] SO_REUSEADDR ?

本文解释了SO_REUSEADDR选项的功能,即允许在TCP连接处于TIME_WAIT状态时重用端口,这对于服务程序重启时继续使用同一端口尤为重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在搞清楚SO_REUSEADDR选项有什么作用前,我们可能需要先简单回顾下TCP的四次握手,也就是TCP的连接释放过程。(当然,SO_REUSEADDR在多宿环境下也很重要,但是我们暂时不对那种情况进行分析。)

在这里,我们称“执行主动关闭的一方”为A,“执行被动关闭的一方”为B。

TCP的连接释放过程的具体细节,可以参考各种教材以及其他文章,在这里我们不再赘述。

简单来说就是,在TCP连接释放的最末尾,A会收到B发来的FIN报文段并响应一个ACK,至此,A就进入了TIME_WAIT状态。

之所以要进入TIME_WAIT状态而非直接CLOSED,其中一个原因就是因为A最后发出的ACK可能丢失,导致B无法正常释放连接,而令A等在TIME_WAIT状态就可以对B重传的FIN报文段进行再次响应

SO_REUSEADDR这个选项的作用就是告知内核,如果该端口正在使用但是TCP状态处于TIME_WAIT ,我们就可以重用这个端口。这在,服务程序停止后想立即重启并依旧使用同一端口时非常有用。当然,如果端口正在使用且TCP状态位于其他状态,重用端口将会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值