关于SO_REUSEADDR和SO_REUSEPORT的使用

SO_RESUEADDR主要有四个方面的作用:

1. 允许一个监听服务器到,bind到现在使用的端口上,即使之前存服务端口的连接存在

    例如: (1)启动服务端口:45001,该端口处于listen状态

               (2)有一个客户端连接到该端口上,可以派生子进程来处理该链路

               (3)关闭监听端口,但是步骤2中的链路存在

               (4)重新启动监听端口45001

     步骤(4)在socket后执行bind的时候会报错“Address already in use”,如果该进程在socket之后和bind之前设置了SO_REUSEADDR,bind将会成功。

 

2. 允许不同的进程bind到同一个机器上相同端口不同IP地址上

   例如:主机上有两个IP地址,172.17.252.81 172.17.252.82 172.17.252.83

             进程A可以bind IP:172.17.252.81  端口:45001 (用netstat看时,172.17.252.81.45001)

             进程B可以bind IP:172.17.252.82  端口:45001 (用netstat看时,172.17.252.82.45001)

             进程C可以bind IP:统配地址            端口:45001  (用netstat看时,*.45001)

  当有客户端请求时,按照最适合的原则,比如客户端connect时指定的IP:172.17.252.81则有进程A处理该服务

  如果没有启动进程A和B,客户端connect时指定的IP:172.17.252.81则有进程C处理该服务

           该情况可能存在风险,对于特权端口,我们都不能bind成功

          对于非特权端口,比如45001,主机上有多个IP地址,采用了统配IP来处理客户的请求,我们可以启动bind具体IP的服务端口,来

处理客户端的请求,对于应用来说是比较危险的。

 

3.允许同一个进程bind到同一个机器相同端口不同IP的地址上,与情况2类似

 

4.允许完全重复的bind,端口和IP相同,此时需要传输协议的支持,一般只支持UDP

 

SO_REUSEPORT

1.该选项允许完全的绑定,IP和端口可以完全一样,每个socket都必须制定该选项

2.如果多播地址,与SO_RESUEADDR含义相同

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值