Chinaunix首页 | 论坛 | 博客
  • 博客访问: 221854
  • 博文数量: 27
  • 博客积分: 1151
  • 博客等级: 少尉
  • 技术积分: 426
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-15 19:25
文章分类
文章存档

2012年(5)

2011年(6)

2010年(16)

我的朋友

分类: LINUX

2010-07-18 18:26:03

select多路复用

select函数可以实现IO多路转接,其原型如下:

#include
int select(int maxfdp1,
    fd_set *restrict readfds, // 关注的读fd
    fd_set *restrict writefds, // 关注的写fd
    fd_set *restrict exceptfds, // 关注的异常fd
    struct timeval *restrict tvptr // 等待时间
);
如果三个关注的fd集合全设置为NULL,则select可被当做定时器。
返回的情况有三种,超时、正常、出错。

fd0    fd1     ...
 0  0  ...
FD_SET


其中,fd_set数据类型是位集,每个fd在其中占一位,可对其进行四种相关操作:
int FD_ISSET(int fd, fd_set * fdset);  // 是否在fdset中
void FD_SET(int fd, fd_set * fdset);   // 加入到fdset中
void FD_CLR(int fd, fd_set * fdset);   // 从fdset中清除
void FD_ZERO(int fd, fd_set * fdset);  // 清空所有fdset


默认情况下,fd最大值为1024,所以使用select时,可以维持的连接数也小于1025,不过可以通过内核进行修改。




阅读(1873) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~