linux select多路复用
时间:2010-07-18 来源:fireworks2
select多路复用
select函数可以实现IO多路转接,其原型如下:
#include <sys/select.h>
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 ...
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,不过可以通过内核进行修改。
select函数可以实现IO多路转接,其原型如下:
#include <sys/select.h>
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在其中占一位,可对其进行四种相关操作:
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,不过可以通过内核进行修改。
相关阅读 更多 +
排行榜 更多 +