我是套接字編程的新手(對Python也有所不同),並且我無法按照自己想要的方式(在服務器端)按選擇超時工作。客戶端連接之前,超時工作正常。我給它1秒的值,超時在我的循環中每1秒鐘到期。如何在select中正確使用timeout參數?
但是,一旦客戶端連接,它不會等待1秒鐘告訴我超時到期。它只是儘可能快地循環,並告訴我超時到期。下面是我的代碼片段:
while running:
try:
self.timeout_expired = False
inputready, outputready, exceptready = select.select(self.inputs, self.outputs, [], self.timeout)
except select.error, e:
break
except socket.error, e:
break
if not (inputready):
# Timeout expired
print 'Timeout expired'
self.timeout_expired = True
# Additional processing follows here
我不知道這是否是足夠的代碼,看看我的問題是,那麼請讓我知道如果你需要看到更多。基本上,客戶端連接後,至少出現,它忽略1秒的超時,並運行得儘可能快,不斷告訴我「超時過期」。任何想法我失蹤?
非常感謝!
編輯:我應該澄清...「inputready」代表從客戶端連接或發送數據到服務器的輸入,以及來自服務器的stdin。從select返回的其他變量只是服務器端變量,而我試圖做的是檢測客戶端是否花了太長時間來回復,所以我只檢查輸入是否爲空。
而'如果inputready'? – 2013-03-04 05:33:58
如果輸入已準備就緒,則服務器通過輸入準備中的每個套接字循環並執行附加處理。 – MattM 2013-03-04 05:36:43