IO::Select模块
IO::Select模块
[b]IO::Select[/b]
系统调用select的面向对象接口
use IO::Select;
$s = IO::Select->new();
$s->add(\*STDIN);
$s->add($some_handle);
@ready = $s->can_read($timeout);
@ready = IO::Select->new(@handles)->can_read(0);

[b]描述[/b]
IO::Select包实现了类似于系统函数select的调用,允许用户了解到有哪些句柄就绪可读或可写或未知的例外
[b]构造[/b]
new([HANDLE])
创建新的对象,并且可随意用一组句柄来初始化

[b]方法[/b]
add(HANDLES) 向对象中增加一个句柄的列表,它是一个事务发生时将要返回的值,IO::Select将这些值保存在高速缓冲区内,并以句柄的fileno建立索引,因此如果多于一个的句柄被指定相同的fileno,那么只将最后一个存入缓冲区。
每一个句柄能够成为一个IO::Select对象,一个整数或第一元素为IO::Handle或整数的数组的指针。

remove(HANDLES) 从对象中移除所给的句柄,同样针对句柄的fileno工作,所增加的具有相同fileno的句柄将不被通过。
exits(HANDLES) 如果句柄现在是存在的,返回一个真值(实际上是句柄本身),其他情况返回未定义。
handles 返回一个数组,元素包括所有已注册的数组。
can_read([TIMEOUT]) 返回一个数组,元素包括已就绪的可读的句柄。TIMEOUT是在返回一个空数组前的等待的最大时间数,若未指定TIMEOUT并且所有句柄已注册,则调用将阻塞。
can_write([TIMEOUT]) 除了是返回可写的句柄外其它与can_read相同。
has_exception([TIMEOUT]) 检测句柄的异常状态。
count() 返回句柄的数目,当调用一个can_方法或对象通过select静态方法时被检测的句柄的数目。
bit() [color=#FF6600]Return the bit string suitable as argument to the core select() call [/color]
select(READ,WRITE,EXCEPTION[,TIMEOUT]) select是一个静态方法,调用它要像调用new()那样带上包名。READ, WRITE 和EXCEPTION 可以是undef或IO::Select对象。TIMEOUT是可选的,具有与核心selcet调用相同的作用。
返回的结果是一个三元素的数组,每个元素是分别指向存储着已就绪可读,可写和未知状态的句柄所组成的数组的指针。如果遇到错误返回一个空列表。

[b]例[/b]
短例展示了如何用IO::Select来写一个与一些套接字通信兵在一个套接字监听更多通信的服务器程序。

[color=#008000] use IO::Select;
use IO::Socket;

$lsn = new IO::Socket::INET(Listen => 1, LocalPort => 8080);
$sel = new IO::Select( $lsn );
while(@ready = $sel->can_read) {
foreach $fh (@ready) {
if($fh == $lsn) {
# Create a new socket
$new = $lsn->accept;
$sel->add($new);
} else {
# Process socket
# Maybe we have finished with the socket
$sel->remove($fh);
$fh->close;
}
}
}[/color]

转载于:https://blog.51cto.com/boyishachang/1294875

IOSelect模块相关推荐

  1. etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程

    1. etcd 项目结构和功能 etcd 项目代码的目录结构如下: $ tree ├── auth ├── build ├── client ├── clientv3 ├── contrib ├── ...

  2. OpenCV 笔记(01)— OpenCV 概念、整体架构、各模块主要功能

    1. OpenCV 概念 图像处理( Image Processing )是用计算机对图像进行分析, 以达到所需结果的技术, 又称影像处理. 图像处理技术一般包括图像压缩, 增强和复原, 匹配.描述和 ...

  3. Python 多线程总结(1)- thread 模块

    thread 模块 1. 单线程 首先看下单线程程序运行的例子,如下所示, import timedef loop0():print 'start loop0 begin', time.ctime() ...

  4. 关于python导入模块和package的一些深度思考

    背景 在python中有导入模块和导入package一说,这篇文章主要介绍导入模块和package的一些思考. 首先什么是模块?什么是package? 模块:用来从逻辑上组织python代码(变量,函 ...

  5. Python Re 模块超全解读!详细

    内行必看!Python Re 模块超全解读! 2019.08.08 18:59:45字数 953阅读 121 re模块下的函数 compile(pattern):创建模式对象 > import ...

  6. python性能分析之line_profiler模块-耗时,效率 时间

    20210203 直接用pycharm 自带的 20201215 直接装不上的情况下 先下载安装文件 再安装 line_profiler使用装饰器(@profile)标记需要调试的函数.用kernpr ...

  7. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  8. 关于python 中的__future__模块

    Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动.有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了. 具体说来就是,某个版本中出现了某个 ...

  9. GPUtil是一个Python模块,使用nvidia-smi从NVIDA GPU获取GPU状态

    GPUtil是一个Python模块,使用nvidia-smi从NVIDA GPU获取GPU状态 一个Python模块,用于在Python中使用nvidia-smi以编程方式从NVIDA GPU获取GP ...

最新文章

  1. python表白源代码加音乐_python炫酷烟花表白源代码
  2. SQL数据库隐藏服务器后需要在连接字符串增加端口号,(provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)]...
  3. PYthon3:函数实现“自动售卖机”功能
  4. idea 使用maven构建项目时,target bytecode version经常自动变化
  5. 锁大全与 GDB调试
  6. 收藏!目标检测优质综述论文总结!
  7. iphone开热点电脑总是搜不到问题的解决办法(百试百灵)
  8. Could not reload resource bundles java.lang.NoS...
  9. oracle--Tracing PL/SQL subprogram calls with parameters values--Mahmoud Hatem,
  10. wordpress.org 删除
  11. Java 实现 HTML 转 PDF 文件
  12. MYSQL8.0 OCP考试题库(如需完整版请留言)
  13. JavaScript到底应该怎么用?
  14. EOS REX 安全系列之从源码开始玩转 REX(一)
  15. 计算机考研专业课——c语言
  16. 家里蹲大学数学杂志官方网站
  17. 向Docker告别的时候到了
  18. 用户登录·验证码测试登录
  19. Oracle 报错 28000原因和解决方法
  20. http设计:错误码 三羊开泰

热门文章

  1. Ceph保证数据安全的机制
  2. Spring框架注入注解与拦截器浅谈
  3. android gif转jpg格式文件,android使用多张图片合成gif文件
  4. Dubbo源码分析系列-深入RPC协议扩展
  5. Leetcode-区域和检索-数组不可变
  6. Kubernetes Pod入门指南
  7. 解决方案:加盐加密算法BCrypt
  8. XShell安装lrzsz实现文件上传到Linux服务器
  9. php使用mysqlnd引发的一些问题处理
  10. Unity3d高频率面试题目(选择题)