我所见过的所有讨论都SO_REUSEADDR
假设它是在同一个已知端口上创建和绑定TCP套接字的程序.
我有两个不同的程序使用相同的端口,我很好奇该机制如何工作 - 为了程序2分配一个端口程序1刚刚关闭,他们都必须SO_REUSEADDR
在创建套接字后指定?
或者对其中一个人来说足够了吗?如果是这样的话,那么当它在TIME_WAIT状态中徘徊时,首先接受套接字的那个或者之后尝试打开它的那个?
这是Python中的一个小例子,希望能让案例更加清晰;
# one.py
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("", 5050)) # Assuming 5050 is available
sys.exit(1) # Assuming s enters TIME_WAIT
# two.py
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("", 5050))
s.listen()
Run Code Online (Sandbox Code Playgroud)
将one.py和two.py视为两个独立的代码库.
one.py和two.py都需要设置SO_REUSEADDR
套接字选项,以便two.py能够容忍来自one.py的延迟TIME_WAIT套接字吗?
谢谢.