select默认最大检查套接口数量是1024,有定义

#define __NFDBITS	(8 * sizeof(unsigned long))
#define __FD_SETSIZE 1024 #define __FDSET_LONGS (__FD_SETSIZE/__NFDBITS) typedef struct {
unsigned long fds_bits [__FDSET_LONGS]; //1024
} __kernel_fd_set

1. 理解select

1.假设fd_set长度1字节

2.FD_ZERO(&set)。set = 0000 0000

3.fd = 3,FD_SET(fd, &set)。set = 0000 0100

4.fd = 6,FD_SET(fd, &set)。set = 0010 0100

4.执行select(fd + 1, &set, NULL, NULL, &tv)阻塞等待

5.若fd = 3可读,则select返回。set = 0000 0100(其他的fd被清空)

2. select

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

readfds:select监视的可读文件句柄集合

writefds:select监视的可写文件句柄集合

exceptfds:select监视的异常文件句柄集合

timeout:本次select()的超时结束时间 (见/usr/sys/select.h)

当readfds或writefds中映象的文件可读或可写或超时,本次select() 就结束返回

select不断修改timeout的值,进入下一次阻塞时,需要重新设置timeout时间

3. FD_CLR

void FD_CLR(int fd, fd_set *set);

从集合set中删除描述字fd

4. FD_ISSET

int FD_ISSET(int fd, fd_set *set);

测试fd是否是集合set中一员

5. FD_SET

void FD_SET(int fd, fd_set *set);

向集合set添加描述字fd

6. FD_ZERO

void FD_ZERO(fd_set *set);

将set初始化为空集NULL

7. 举例

while(1)
{
struct timeval tv; //根据需要
fd_set readfds; FD_ZERO(&readfds); //每次必须清空
FD_SET(sock, &readfds); //设置的套接字必须是存在的,不然select报错 result = select(FD_SETSIZE, &readfds, NULL, NULL, &tv);
if (result < 0)
{
if (errno != EINTR)
{
fprintf(stderr, "Error in select(): %d %s\r\n", errno, strerror(errno));
}
}
else if (result > 0)
{
unsigned char buffer[MAX_PACKET_SIZE];
int numBytes; if (FD_ISSET(sock, &readfds))
{
struct sockaddr_storage addr;
socklen_t addrLen; addrLen = sizeof(addr); numBytes = recvfrom(sock, buffer, MAX_PACKET_SIZE, 0, (struct sockaddr *)&addr, &addrLen);
}
}
}

select用法 多并发处理的更多相关文章

  1. html select用法总结

    本文将介绍select 原生的常用方法,这些都是经过测试,兼容ie6到ie10,及chrome,火狐等,也就是说大部分浏览器都兼容.如果大家发现有不兼容的情况,可以跟我留言. 我们对基本的用法了如指掌 ...

  2. 网络通信 --> select()用法

    select()用法 头文件 #include <sys/time.h> #include <sys/types.h> #include <unistd.h> 定义 ...

  3. python+selenium七:下拉框、选项框、select用法

    # from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsimpo ...

  4. golang学习之select用法

    早期的select函数是用来监控一系列的文件句柄,一旦其中一个文件句柄发生IO操作,该select调用就会被返回.golang在语言级别直接支持select,用于处理异步IO问题. select用法同 ...

  5. 数据库Oracle的select用法(部分)

    Oracle的select用法(部分): 1.查询所有: select * from employees; 2.加上where子句:用选择限制行 select * from employees whe ...

  6. 每天玩转3分钟 MyBatis-Plus - 6. select 用法

    每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 每天玩转3分钟 MyBatis-Plus - 3. 高级查询(一) 每天玩转 ...

  7. select用法&原理详解(源码剖析)(转)

    今天遇到了在select()前后fd_set的变化问题,查了好久终于找到一个有用的帖子了,很赞,很详细!!原文链接如下: select用法&原理详解(源码剖析) 我的问题是: 如下图示:在se ...

  8. select用法

    每一次操作select的时候,总是要出来翻一下资料,不如自己总结一下,以后就翻这里了. 比如<select class="selector"></select&g ...

  9. shell编程中的select用法

    select 语句 select表达式是bash的一种扩展应用,擅长于交互式场合.用户可以从一组不同的值中进行选择: select var in ... ; do break; done .... n ...

随机推荐

  1. Comet OJ - Contest #2题解

    传送门 既然没参加过就没有什么小裙子不小裙子的了-- 顺便全是概率期望真是劲啊-- 因自过去而至的残响起舞 \(k\)增长非常快,大力模拟一下就行了 int main(){ scanf("% ...

  2. LA 4998简单加密游戏 —— 自相似性质&&不动点迭代

    题意 输入正整数 $K_1$($K_1 \leq 50000$),找一个12为正整数 $K_2$(不能含有前导0)使得 ${K_1}^{K_2} \equiv K_2(mod \ {10}^{12}) ...

  3. 原生PHP+原生ajax批量删除(超简单),ajax删除,ajax即点即改,完整代码,完整实例

    效果图: 建表:company DROP TABLE IF EXISTS `company`;CREATE TABLE `company` ( `id` int(11) NOT NULL AUTO_I ...

  4. CF Educational Round 78 (Div2)题解报告A~E

    CF Educational Round 78 (Div2)题解报告A~E A:Two Rival Students​ 依题意模拟即可 #include<bits/stdc++.h> us ...

  5. 记一次Pr中视频蜜汁卡顿往复和解决方法

    目录 问题 换素材的起因 灵异素材 无端联想 解决 问题 换素材的起因 本来视频剪了一晚剪完了,导出一看,好家伙,糊到上世纪.原来素材的像素大小都没法看,这视频素材我是从别人U盘拷过来的,可他竟然是用 ...

  6. 微信小程序跳转函数总结

    微信小程序跳转函数总结 ​ 笔者在微信小程序前端的开发过程中,在不同的情况下遇到了需要使用不同的页面跳转逻辑的情况,以下是我对这些函数的使用场景的一个总结介绍. wx.navigateTo 这是最常用 ...

  7. react-native 设置启动模拟器

    react-native 设置启动模拟器 查看iOS可选设备: xcrun simctl list devices iPhone7 Plus启动(下次启动会默认使用最后一次选择设备,直接启动npx r ...

  8. Hibernate的Hql语句使用in关键字

    原文地址:https://blog.csdn.net/u013410747/article/details/50954867

  9. Atlassian JIRA 插件开发之三 创建

    之前的都是准备,真正的插件是从这里开始的 参考:https://developer.atlassian.com/server/framework/atlassian-sdk/modify-the-pl ...

  10. ng 手机验证码验证/发送(含倒计时)

    ng 的手机号码进行验证: 1.在对应的ts文件中,先声明一个变量 private mobile: string private btnCaptchaText: string = '发送验证码'   ...