我在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