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 ...
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,不过可以通过内核进行修改。
阅读(1903) | 评论(0) | 转发(0) |