gpt4 book ai didi

sockets - 在处理其他数据时接收到数据时,套接字select()的预期行为?

转载 作者:行者123 更新时间:2023-12-03 11:58:35 26 4
gpt4 key购买 nike

我有一个关于套接字编程和在while循环中运行select命令的概念性问题。从示例回显服务器(用python编写,但语言无关紧要)中查看以下摘录:http://ilab.cs.byu.edu/python/select/echoserver.html

while running: 
inputready,outputready,exceptready = select.select(input,[],[])

for s in inputready:

if s == server:
# handle the server socket
client, address = server.accept()
input.append(client)

elif s == sys.stdin:
# handle standard input
junk = sys.stdin.readline()
running = 0

else:
# handle all other sockets
data = s.recv(size)
if data:
s.send(data)
else:
s.close()
input.remove(s)

问题:如果新客户端此时连接并发送数据,则流程在for循环中执行代码时预期的行为是什么?是否有某种类型的缓冲区是默认套接字库的一部分,以便在随后的select调用中,它将立即返回处理早期请求时输入的值?还是在服务器实际上没有在select()中等待时连接的新客户端会被忽略,这样总是有可能(尽管这不太可能,考虑到我们正在说毫秒)来丢弃请求?

(注意:我在使用套接字的不同代码库上进行了一些经验测试,似乎有一个缓冲区-如果实际上是设计使然,该缓冲区的典型大小是多少?)

最佳答案

内核网络堆栈以异步方式处理您的进程的新连接,除非永不超过listen积压,否则它将永远不会丢弃传入的连接。

因此,除非您收到连接的速度如此之快以至于您的循环无法跟上它们的连接,否则就不会有问题。 (也就是说,这是每秒传入连接的问题,而不是相对于循环的任何特定连接的时间。)

关于sockets - 在处理其他数据时接收到数据时,套接字select()的预期行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6133973/

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