- 论坛徽章:
- 0
|
小弟在学习看Python基础教程 异步IO poll的时候遇到一个问题,
书中例子是这样的:- import socket,select
- s=socket.socket()
- host=socket.gethostname()
- port=1234
- s.bind((host,port))
- fdmap={s.fileno():s}
- s.listen(5)
- p=select.poll()
- p.register(s)
- while True:
- events=p.poll()
- for fd,event in events:
- if fd in fdmap:
- c,addr=s.accept()
- print 'Got connection'
- p.register(c)
- fdmap[c.fileno]=c
- elif event & select.POLLIN:
- data=fdmap[fd].recv(1024)
- if not data:
- print 'disconnect'
- p.unregister(fd)
- del fdmap[fd]
- else:
- print data
复制代码 我的问题是, 当有一个连接进来的时候, p也把c注册了,并且映射到了fdmap中,那么在下一个循环中,如果c这个socket来了数据,而且c也在fdmap中,那么这个程序岂不又进入
if fd in fdmap: 这个分支中了而不会进入 elif event &select.POLLIN这个分支?这个例子写得有错误吧。应该改成 if fd is s,对吗? |
|