【Linux进阶】端口复用与SO_REUSEADDR/SO_REUSEPORT

端口复用

端口复用真正的用处主要在于服务器编程:当服务器需要重启时,经常会碰到端口尚未完全关闭的情况,这时如果不设置端口复用,则无法完成绑定,因为端口还处于被别的套接口绑定的状态之中。

以下为个人见解,若有错误请评论区指出和讨论,会及时修改。

1、对TCP编程来说,端口复用为了解决两个问题:

  1. TIME_WAIT 状态造成的服务器无法快速重启问题。

  2. 使用多个进程/线程达到对同一个端口监听的效果。

2、UDP中一般是为了达到多播的效果。

SO_REUSEADDR

见名知意,此选项为地址复用,但其实单用于解决TCP的TIME_WAIT的重启状态

而对于UDP,SO_REUSEADDR和SO_REUSEPORT相同,都可以解决监听同一端口的问题,即达到UDP组播。

  1. SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在。这通常是重启监听服务器时出现,若不设置此选项,则bind时将出错。

  2. SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址即可。对于TCP,我们根本不可能启动捆绑相同IP地址和相同端口号的多个服务器。

  3. SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。这一般不用于TCP服务器。

  4. SO_REUSEADDR允许完全重复的捆绑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值