1
我用select
這樣的:如何使用網絡套接字始終可以讀取時選擇?
while True:
readReady, _, _ = select.select([src, dst], [], [])
for ready in readReady:
if ready == dst:
toRead = dst
toWrite = src
else:
toRead = src
toWrite = dst
toWrite.sendall(toRead.recv(10))
如果toWrite
塊,直到所有的數據被髮送沒關係。但問題是select
立即返回,因爲套接字已準備好在沒有數據的情況下被讀取。我該如何等待,直到有實際的數據?
此外,print(toRead.recv(10))
打印b''
這是空的(雖然我預計select
阻止)。套接字處於阻塞模式。
當'recv'返回'b'''時,套接字爲「EOF」:讀取將永遠不會阻塞,並且總是不會返回任何內容。因此'select'表示讀取不會阻塞(它們不會),並且您應該讀取並記錄輸入結束條件並做適當的事情(也許關閉套接字,如果它僅用於讀取;也許只是停止選擇閱讀)。 – torek
@torek你說得對,你應該發佈它作爲答案:)謝謝btw – loolooyyyy