第六章 I/O复用:Select和poll函数 在前一章中,我们遇到一个问题就是,客户端阻塞在了从标准输入中读取数据,与此同时,服务器由于某种原因要求关闭连接给客户端发送了一个FIN,而客户端只有从标准输入读到数据返回后才能知道连接已关闭。在这一章中介绍的I/O复用可以很好的解决这个问题。 1.I/O模型 a. unix下共有五种I/O模型 阻塞I/O 非阻塞I/O I/O复用(select和poll) 信号驱动I/O(SIGIO) 异步I/O(Posix.1的aio_系列...
看书有写到: fds[0].events=pollIN; fds[1].events=pollIN; 这句: while(fds[0].events || fds[0].events) 这句有何意义呢? 都是返回1的吗? 还有一句: if(fds.revents) {} 这句又有何意义呢? 是返回一个如:例pollIN,它代表一个整数? 看了书没搞懂.非常感谢回答.
最近碰到一个奇怪的问题。 我们的应用程序在一个经过openSSL的端口上监听,然后和client端进行交互。 当连接建立完以后,我们的程序是通过poll来判断该连接上是否有数据可读的。 现在的问题是: 有时候能看到数据进来(通过Wireshar看到的),但我们程序的poll结果却一直说revents为0。 不知道这种情况是怎么引起的。 请指教,谢谢。
在linux下select函数的最大可管理的socket连接数是FD_SETSIZE=1024,在网上看见说使用poll的话可以突破1024的限制,但是我在把程序由select改为poll以后连接数到了1024以后,仍然不能建立连接,还是有1024这个限制,不知道poll是不是还是跟select一样,受到linux内核的限制?
Select系统调用用于多路监控,当没有一个文件满足要求时,select
本帖最后由 langwan1314 于 2010-07-06 22:13 编辑 poll()函数:这个函数是某些unix系统提供的用于执行与select()函数同等功能的函数,下面是这个函数的声明: #include <poll.h> int poll(struct pollfd fds[], nfds_t nfds, int timeout); 参数说明: fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符;每当调用这个函数之后,系统不会清空这个数组,操作起来比较方便;特别是对于socket连...