如何正确使用 select.select() 和 someSocket.recv
How to correctly use select.select() with someSocket.recv
正在打印 "Received":
connection, clientAddr = mysocket.accept()
data = connection.recv(256)
print("Received")
正在打印 "Timed out":
connection, clientAddr = mysocket.accept()
mysocket.setblocking(0)
readable, writeable, exceptional = select.select([mysocket], [], [], 5)
if mysocket in readable:
data = connection.recv(256)
print("Received")
else:
print("Timed out")
问题不在于5秒太短,数据在5秒内在第一个代码块中被接收。
我尝试删除行 mysocket.setblocking(0)
,没有任何变化。
我尝试将 if mysocket in readable:
更改为 if readable:
并且也做了 print(readable)
,仍然超时并打印输出,“[]”。
编辑:我也尝试在 else
块中使用 mysocket.recv(256)
,它收到了数据。
我 运行 这个 Linux。
readable, writeable, exceptional = select.select([mysocket], [], [], 5)
if mysocket in readable:
data = connection.recv(256)
您在 mysocket
(侦听器套接字)中执行 select
,如果 select
发出可用数据信号,您将在 connection
(连接套接字)上进行读取。如果您想知道是否可以从中读取,您应该在 connection
上执行 select
。如果您想知道是否可以调用 accept
来获得另一个客户端连接,则应该在 mysocket
上执行 select。
正在打印 "Received":
connection, clientAddr = mysocket.accept()
data = connection.recv(256)
print("Received")
正在打印 "Timed out":
connection, clientAddr = mysocket.accept()
mysocket.setblocking(0)
readable, writeable, exceptional = select.select([mysocket], [], [], 5)
if mysocket in readable:
data = connection.recv(256)
print("Received")
else:
print("Timed out")
问题不在于5秒太短,数据在5秒内在第一个代码块中被接收。
我尝试删除行 mysocket.setblocking(0)
,没有任何变化。
我尝试将 if mysocket in readable:
更改为 if readable:
并且也做了 print(readable)
,仍然超时并打印输出,“[]”。
编辑:我也尝试在 else
块中使用 mysocket.recv(256)
,它收到了数据。
我 运行 这个 Linux。
readable, writeable, exceptional = select.select([mysocket], [], [], 5)
if mysocket in readable:
data = connection.recv(256)
您在 mysocket
(侦听器套接字)中执行 select
,如果 select
发出可用数据信号,您将在 connection
(连接套接字)上进行读取。如果您想知道是否可以从中读取,您应该在 connection
上执行 select
。如果您想知道是否可以调用 accept
来获得另一个客户端连接,则应该在 mysocket
上执行 select。