首页 > 其他 > 详细

9 I/O复用

时间:2015-12-10 12:59:12      阅读:124      评论:0      收藏:0      [点我收藏+]

I/O复用使得程序能够同时监听多个文件描述符,适用于以下情况

  • 客户端同时处理多个socket,比如非阻塞connect
  • 客户端同事处理用户输入和网络连接,比如聊天室程序
  • TCP服务器同时处理监听socket和连接socket,这是IO复用最多的用法
  • 服务器要同时处理TCP请求和UDP请求,比如回射服务器
  • 服务器要同时监听多个端口,或者处理多种事物,比如xinetd服务器
  • linux下实现IO复用的系统调用主要有select poll epoll

9.1 select系统调用

1 #include <sys/socket.h>
2 int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout);

 

nfds参数指定被监听的文件描述符总数,痛陈设置为selcet监听的所有文件描述符的最大值加1

readfds writefds exceptfds分别指向可读,可写和异常等事件对应的文件描述符集合,调用select后,通过这三个参数传入自己感兴趣的文件描述符,select返回,内核将修改它们来通知应用程序哪些文件描述符就绪

fd_set通过一些列宏来访问

1 #include <sys/socket.h>
2 FD_ZERO(fd_set *fdset);         //清除fdset所有位
3 FD_SET(int fd, fd_set *fdset);     //设置fdset的位fd *
4 FD_CLR(int fd, fd_set *fdset);     //清除fdset的位fd *
5 int FD_ISSET(int fd, fd_set *fdset); //测试fdset的位fd是否被设置

timeout用来设置select函数的超时时间

1 struct timeval {
2     long tv_sec;
3     long tv_usec;
4 };

 

9 I/O复用

原文:http://www.cnblogs.com/raichen/p/5034952.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!