首页 > TCP/IP > 小心TCP重连时连上了自己-TCP的回环连接

小心TCP重连时连上了自己-TCP的回环连接

2014年5月17日 发表评论 阅读评论 10047次阅读    

刚才在测试一个服务器跟redis之间的连接自动重连机制时,碰到了个诡异的问题,epoll检测到了连接可用但程序总是不work,并且诡异的是redis被我停掉了,server竟然能够连接上来····
后来netstat -anp | grep 8379 查看了一下原来是server自己连接上了自己···

tcp 0 0 192.168.1.130:8379 192.168.1.130:8379 ESTABLISHED 24276/mosquitto

因为我把redis停掉以后,server会不断的大量重连redis,导致socket() 函数自动随机分配的端口号正好是本机的8379端口!然后socket()就真的把redis的8379端口给open了,然后server再去connect(8379) 的时候当然就能够成功了。
查了一下资料,具体介绍这里有:TCP Loop Connect .

解决办法是尽量别使用 本地的随机端口范围的端口: /proc/sys/net/ipv4/ip_local_port_range , 但实际似乎不可行。

目前我的解决办法是控制重连的频率,这样尽量避免悲剧,另外当然了,对端别用一个IP不就行了····

Share
分类: TCP/IP 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。