linux – 在本地主机上使用相同的IP和端口创建套接字

linux – 在本地主机上使用相同的IP和端口创建套接字,第1张

概述我在 Linux上看到了奇怪的行为,我看到远程端和本地端都显示相同的IP和端口组合.以下是netstat输出 netstat -anp | grep 6102 tcp 0 0 139.185.44.123:61020 0.0.0.0:* LISTEN 3361 / a.out tcp 0 0 139.185.44.123:61021 139.185.44.123:61021 ESTABLISHED 我在 Linux上看到了奇怪的行为,我看到远程端和本地端都显示相同的IP和端口组合.以下是netstat输出

netstat -anp | grep 6102

tcp 0 0 139.185.44.123:61020 0.0.0.0:* ListEN 3361 / a.out
tcp 0 0 139.185.44.123:61021 139.185.44.123:61021 ESTABliSHED 3361 / a.out

任何人都可以告诉我,这是否可能?如果是,那么可能是什么情景?

解决方法@H_403_18@ 连接由4元组((源IP,源端口),(目标IP,目标端口))标识,源端口和目标端口可以相同而没有任何问题.甚至可以通过一个过程建立这种连接,这将导致您看到的输出.

但是,我刚被一个令人讨厌的错误所困扰,其中一个客户端套接字将尝试连接到同一台机器上短暂端口范围内具有端口号的服务器套接字.连接 *** 作将重试 *** 作,直到成功为止.

重试功能是问题:如果服务器应用程序没有运行并且随机选择的源端口与目标端口相同(这是可能的,因为目标端口在临时范围内),客户端套接字将连接到自己(这可能会对客户端应用程序的内部逻辑造成严重破坏).

由于客户端正在尽快进行重试,因此可能发生的可能性为1到30.000的可能性很快.

以下Python脚本重现它:

import sockethost = 'localhost'port = 35911ctr = 0while True:    try:        s = socket.socket(socket.AF_INET,socket.soCK_STREAM)        s.settimeout(5)        ctr += 1        s.connect((host,port))        print "Connected to self after",ctr,"trIEs"        break    except socket.error,e:        print e        # Retry
总结

以上是内存溢出为你收集整理的linux – 在本地主机上使用相同的IP和端口创建套接字全部内容,希望文章能够帮你解决linux – 在本地主机上使用相同的IP和端口创建套接字所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1025278.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存