tcp套接字端口复用SO_REUSEADDR

TCP套接字的端口复用功能由SO_REUSEADDR选项控制,能解决进程重启或退出时端口未及时释放的问题。不使用SO_REUSEADDR时,绑定同一端口会报“Address already in use”错误。该选项允许在TCP服务器重启或存在旧连接时快速绑定端口,以及在UDP中支持多样的捆绑方式。
摘要由CSDN通过智能技术生成

如果tcp下不使用SO_REUSEADDR

1.进程创建监听套接字socket1,并且建立了多个连接时。此时进程创建另一个套接字socket2,试图band同一个端口的时候,会报“Address already in use”的错误。

2.杀死上述进程,重新启动,调用band重新绑定,建立套接字监听。这次邦定只有在bind前(两个socket绑定之前都需要指定)指定了SO_REUSEADDR时才能成功。
(因为直接杀进程,没有显式关闭套接字来释放端口,会等待一段时间后才可以重新use这个关口,解决办法就是用SO_REUSEADDR)

端口复用最常用的用途应该是防止服务器重启时之前绑定的端口还未释放或者程序突然退出而系统没有释放端口。这种情况下如果设定了端口复用,则新启动的服务器进程可以直接绑定端口。如果没有设定端口复用,绑定会失败,提示ADDR已经在使用中。

SO_REUSEADDR提供如下四个功能:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值