我对 TCP/IP 网络上的客户端套接字有疑问。假设我用
try:
comSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
comSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
except socket.error, msg:
sys.stderr.write("[ERROR] %s\n" % msg[1])
sys.exit(1)
try:
comSocket.bind(('', 5555))
comSocket.connect()
except socket.error, msg:
sys.stderr.write("[ERROR] %s\n" % msg[1])
sys.exit(2)
创建的socket会绑定到5555端口,问题是结束连接后
comSocket.shutdown(1)
comSocket.close()
使用 wireshark,我看到套接字从两侧用 FIN、ACK 和 ACK 关闭,我无法再次使用该端口。我收到以下错误:
[ERROR] Address already in use
我想知道如何立即清除端口,以便下次我仍然可以使用同一个端口。
comSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
setsockopt 好像不能解决问题 谢谢!
原文由 Tu Hoang 发布,翻译遵循 CC BY-SA 4.0 许可协议
在绑定套接字之前尝试使用
SO_REUSEADDR
套接字选项。编辑: 我看到你仍然有这个问题。有一种情况
SO_REUSEADDR
不起作用。如果您尝试绑定套接字并重新连接到相同的目的地(启用SO_REUSEADDR
),那么TIME_WAIT
仍然有效。但是,它将允许您连接到不同的主机:端口。我想到了几个解决方案。您可以继续重试,直到您再次获得连接。或者,如果客户端启动套接字(而不是服务器)的关闭,那么它应该神奇地工作。