gpt4 book ai didi

python - 阻塞套接字并选择

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:37 26 4
gpt4 key购买 nike

我正在玩套接字,我对使用带有选择的阻塞套接字有一些疑问。假设我只是在跟踪潜在的读者。我是否正确地认为 select 将通过列表中的第一个套接字,如果有一些数据可用,它将返回,如果没有,它将阻塞直到 select 的超时到期? select什么时候会检查read list中的其他socket?

为了简单起见,让我用一个 python 示例来说明:

servsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
servsock.bind(("", 2500))
servsock.listen(15)
servsock.setblocking(1)

readlist = [servsock]

while 1:
(sread, swrite, sexc) = select.select(readlist, [], [] );

for sock in sread:

#received a connect to the server socket
if sock == servsock:

(newsock, address) = servsock.accept()
newsock.setblocking(1)
print "I got a connection from ", address
readlist.append(newsock)
newsock.send("you're connected to the select server")
else:
recv_msg = sock.recv(5)

if recv_msg == "":
(host, port) = sock.getpeername()
print "Client %s:%s closed the connection" % (host,port)
sock.close()
readlist.remove(sock)
else:
(host, port) = sock.getpeername()
print "client %s:%s sent: %s "% (host,port,recv_msg)

由于它们是阻塞套接字,所以在测试列表中的套接字是否有数据要读取时,是否会选择始终阻塞?

最佳答案

select() C API 返回当前可读的所有套接字列表。假设 python 的包装器做同样的事情,如果多个套接字可读,sread 将包含多个元素。

阻塞套接字只会在没有数据存在时阻塞,因此在 select() 调用指示有数据后,您可以假设 one 调用 recv 不会阻塞。

关于python - 阻塞套接字并选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5091441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com