Python的select.select()函数初探
来源:互联网 发布:每天计划软件 编辑:程序博客网 时间:2024/05/31 19:03
转自:blog.csdn.net/vito21/article/details/53319306
import socket,select s=socket.socket() print('s:',s) host=socket.gethostname() port=1234 s.bind((host,port)) s.listen(5) inputs=[s] while True: rs,ws,es=select.select(inputs,[],[]) #1、select函数阻塞进程,直到inputs中的套接字被触发(在此例中,套接字接收到客户端发来的握手信号,从而变得可读,满足select函数的“可读”条件),rs返回被触发的套接字(服务器套接字); # 4、select再次阻塞进程,同时监听服务器套接字和获得的客户端套接字; for r in rs: if r is s: #2、如果是服务器套接字被触发(监听到有客户端连接服务器) c, addr = s.accept() print('Got connection from', addr) inputs.append(c) #3、inputs加入客户端套接字 else: #5、当客户端发送数据时,客户端套接字被触发,rs返回客户端套接字,然后进行下一步处理。 try: data=r.recv(1024) disconnected=not data except socket.error: disconnected = True if disconnected: print(r.getpeername(),'disconnected') inputs.remove(r) else: print(data)
总结一下,运行到这个语句时:
rs,ws,es=select.select(inputs,[],[])
select函数阻塞程序运行,监控inputs中的套接字,当其中有套接字满足可读的条件(第一个参数为可读,如果是第二个参数则为可写),则把这个套接字返回给rs,然后程序继续运行。
至于套接字怎么才算可读呢?搜索可知,当套接字缓冲区大于1byte时,就被标记为可读。也就是说,当套接字收到客户端发来的数据,就变成可读,然后select就会把这个套接字取出来,进入下一步程序。
阅读全文
0 0
- Python的select.select()函数初探
- Python的select.select()函数初探
- 基于Python的select和poll函数
- Python的select
- Python的Select模块
- 关于select 的函数
- select函数的使用
- perl 的select 函数
- perl 的select 函数
- select函数的例子
- select函数的使用
- socket的select函数
- select函数的作用!
- select函数的用法
- Select的函数格式
- Select函数的说明
- linxu的select函数
- select函数的使用
- MFC注册控件用法
- guava的ListenableFuture使用
- android lcm驱动解读及调试
- swift 中使用扩展实现代理
- 正则表达式的先行断言(lookahead)和后行断言(lookbehind)
- Python的select.select()函数初探
- webview
- Tornado 文档学习:认证与安全
- ZOJ3981 CCPC秦皇岛站A题
- H5 实训课 Day 3
- 鼠标响应
- opencv中BackgroundSubtractorMOG2源码分析与原理讲解
- Jquery prop()与change()冲突解决办法
- Android 计步功能-简单实现