我在SO_REUSEADDR
上看到的所有讨论都假定它是创建并绑定到已知端口上的TCP套接字的相同程序。每个人都必须同意SO_REUSEADDR吗?
我有两个不同的程序使用相同的端口,我很好奇这个机制是如何工作的 - 为了让程序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()
将one.py和two.py想象成两个独立的代码库。
是否都one.py和two.py需要的SO_REUSEADDR
套接字选项,以便two.py容忍来自one.py一个挥之不去的TIME_WAIT套接字设置?
谢谢。
http://www.unixguide.net/network/socketfaq/4.5.shtml 我想你所有的程序都应该使用SO_REUSEADRR。 – 2011-12-14 15:26:38
[SO_REUSEADDR?的使用?]的可能重复(http://stackoverflow.com/questions/577885/uses-of-so-reuseaddr) – 2011-12-14 15:28:16
@JeremyD - 谢谢!我认为只有第二个程序需要SO_REUSEADDR?我仍然不完全清楚。 – 2011-12-14 15:29:06