2011-10-14 87 views
4

我正在學習如何在python中使用套接字,並且經常在我的程序崩潰或者我Ctrl + C服務器套接字以某種方式在端口上保持監聽時。這顯然會阻止程序在重新啓動時監聽該端口,所以我必須不斷改變它。退出/崩潰時關閉服務器套接字

我猜我需要在某處做socket.close(),但在哪裏?

回答

7

你可以試試atexit模塊。

import atexit 

function close_socket: 
    s.close() 

atexit.register(close_socket) 

如果問題是在港口延遲測試期間變得可用,我會建議設置SO_REUSEADDR這將使該端口馬上又不是綁定的等待TCP堆棧上超時。

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

終止程序會使其所有套接字自動關閉。但是,此後TCP端口仍然保持使用狀態。在第2.7節中,UNIX socket FAQ有很長的解釋。

出於測試目的,最好問一個任意端口(或詢問連續的端口,如8000,8001,8002,...)並在控制檯中輸出該端口。

相關問題