【发布时间】:2011-05-26 05:13:17
【问题描述】:
我有一个关于套接字编程和在 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() 中等待时连接的新客户端是否会被忽略,因此总是有可能(尽管不太可能,因为我们正在谈论毫秒)请求被丢弃?
(注意:我对使用套接字的不同代码库进行了一些经验测试,似乎有一个缓冲区——如果这实际上是设计使然,那么这个缓冲区的典型大小是多少?)
【问题讨论】:
标签: sockets networking