2010-05-04 92 views
3

我有一個簡單的服務器/客戶端。我使用netcat作爲客戶端來測試服務器。如果我停止客戶端退出之前的服務器,我將無法再次啓動服務器了一會兒,我去這個錯誤: 「 [錯誤98]地址已在使用 」在Python 2.6中關閉套接字的正確方法是什麼?

,但如果我收首先客戶端,然後服務器停止,我不會有這個問題。

我的服務器套接字是這樣工作的:

try: 
    s=socket 
    s.bind(..) 
    s.listen(1) 
    conn,addr=s.accept() 
finally: 
    conn.close() 
    s.close() 

感覺對我來說,服務器沒有正確關閉套接字。但我不知道如何解決這個問題。

回答

9

你正在關閉套接字。但是,在套接字關閉後,套接字將繼續使用資源幾分鐘,以便如果遠程端錯過了一個數據包,則可以重新發送數據包。

您應該能夠通過調用下面來解決它,你打電話之前bind

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 

會告訴你要允許插座的多個綁定操作系統。

相關問題