Python Socket Error: Address already in use的解決辦法


前用Python寫了個簡單的TCP通信程序,放在騰訊雲上24小時運行。不過有個問題,有時候使用kill -9 pid命令結束掉python進程后,再次運行程序就會提示Address already in use這個錯誤,然而等一段時間再去運行就可以了。

造成這個問題的原因在於此時TCP連接還沒有完全關閉,而Socket默認不支持地址復用。深入的原因打算等之后仔細學習TCP/IP協議的時候再來研究,目前只是要找一個解決方案。

找到的解決方案也很簡單,在綁定前調用setsockopt()函數讓Socket允許地址復用即可,即以下代碼:

1
2
3
MySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
MySocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
MySocket.bind(TCPADDR)

第2行代碼就是調用setsockopt()函數,其中SOL_SOCKET代表對Socket層進行設置,SO_REUSEADDR代表是否允許在bind過程中本地地址可重復使用,最后的1表示允許。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM