我有一个关于套接字编程和在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)
问:什么是当过程中,如果执行代码回路预期的行为新客户端在那一刻连接并发送数据?是否有某种类型的缓冲区是缺省套接字库的一部分,这样在随后的select调用中,它会立即返回处理先前请求时进入的值?或者,当服务器没有真正在select()中等待的时候连接的新客户端会被忽略,并且因此总是可能的(虽然不太可能,因为我们正在谈论毫秒)请求被删除?
(注:我做了使用套接字不同的代码库的一些实证检验,它似乎有一个缓冲 - 如果这实际上是通过设计,这是什么缓冲的典型大小)
非常好,收听积压是有意义的,并且与我凭经验观察到的一致。谢谢! – esilver 2011-05-26 05:29:43