码迷,mamicode.com
首页 > 其他好文 > 详细

9 I/O复用

时间:2015-12-10 13:01:15      阅读:159      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!