端口复用(SO_REUSEADDR)是干啥用的…

      如果端口复用了(设置了socket的SO_REUSEADDR选项),在一个应用程序可以把n个套接字绑在一个端口上而不出错。那现在是不是可以从这些套接字中并发地读取了?答案是否定的——测试结果是只有最后一个套接字会正常接收数据。
      端口复用最常用的用途应该是防止服务器重启时之前绑定的端口还未释放。这种情况下如果设定了端口复用,则新启动的服务器进程可以直接绑定端口,直接接过前辈的枪。如果没有设定端口复用,绑定会失败,提示ADDR已经在使用中——那只好等等再重试了,麻烦!
      最近上网乱看,发现还有其他用途,摘抄自非常经典的UNPv1:
      1、当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而你启动的程序的socket2要占用该地址和端口,你的程序 就要用到该选项。 (这就是我说的情况啦)
        2、SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但每个实例绑定的 IP地址是不能相同的。在有多块网卡或用IP  Alias技术的机器可以测试这种情况。
        3、SO_REUSEADDR允许单个 进程绑定相同的端口到多个socket上,但每个socket绑定的ip地址不同。这和2很相似,区别请看UNPv1。
        4、SO_REUSEADDR允许完全相同的地址和端口的重复绑定。但这只用于UDP的多播,不用于TCP。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值