簡體   English   中英

在python 2.6中關閉套接字的正確方法是什么?

[英]what is the correct way to close a socket in python 2.6?

我有一個簡單的服務器/客戶端。 我使用netcat作為客戶端來測試服務器。 如果我在客戶端退出之前停止服務器,我將無法再啟動服務器一段時間,我發現此錯誤:“[Errno 98]地址已在使用中”

但如果我先關閉客戶端,然后服務器停止,我將不會有這個問題。

我的服務器套接字如下:

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

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

你關閉插座就好了。 但是,套接字在套接字關閉后繼續使用資源幾分鍾,因此如果遠程端錯過了數據包,則可以重新發送數據包。

在調用bind之前,您應該能夠通過調用以下內容來解決它:

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

這將告訴操作系統您希望允許多個套接字綁定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM