我有一個服務器套接字,用於偵聽傳入連接併爲每個客戶端創建新套接字。我有一個while循環來保證服務器負責(當沒有連接時,可以使用按鈕關閉它),並且我使用.select
來檢查是否有任何連接。我遇到的問題是.select
由於某種原因被阻塞。它等到有連接而不是檢查連接然後繼續。python .select阻塞
def serverstart(self):
self.buttonswitch("1")
self.host = self.intip
self.port = 5000
s = socket.socket(socket.AF_INET6)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setblocking(0)
s.bind((self.host, self.port))
inputs = [ s ]
s.listen(5)
self.serverstatus = "1"
while s:
inputready, outputready, exceptready = select.select(inputs, [], [])
if inputready == inputs and self.serverstatus == "1":
print inputready
c, addr = s.accept()
ct = threading.Thread(target=self.client_thread, args=[c, addr])
ct.start()
if self.serverstatus == "0":
break
s.close()
print "Closing socket"
self.buttonswitch("0")
編輯:
添加超時用於工作非阻塞選擇溶液
inputready, outputready, exceptready = select.select(inputs, [], [], 0.1)
_ ...「使用按鈕來關閉它」所以這是一個圖形用戶界面的一部分? GUI是否有自己的處理套接字的方法? – tdelaney