在socket通讯程序里,select 起到什么作用
来源:互联网 发布:unity3d接入ios内购 编辑:程序博客网 时间:2024/05/02 01:49
详细请看以下的程序段, 对其中的意思不是很了解, 有高手请帮解释一下,多谢!!
int maxfd;
fd_set mask, rfds;
struct timeval timeout;
timeout.tv_sec = 1; /* 阻塞1秒后超时返回 */
timeout.tv_usec = 0;
memset(&mask, 0, sizeof(fd_set));
memset(&rfds, 0, sizeof(fd_set));
FD_ZERO(&mask);
FD_ZERO(&rfds);
FD_SET(s, &mask);
maxfd = s;
while (1)
{
rfds = mask;
if (select(maxfd + 1, &rfds, NULL, NULL, &timeout) <= 0)
{
continue;
}
if (FD_ISSET(s, &rfds))
{
remoteAddrLen = sizeof(remote);
client = accept(s,(struct sockaddr *)&remote,&remoteAddrLen);
......
}
}
当SOCKET建立起来后,如果客户端有数据要发送,那服务端就会侦查到这一事件(当然还有其他事件)
这个select函数就是把你想侦查到的事件“收集”起来。没“收集”的,就不会侦查到,当然就不能对这些事件做出反应了
select()的机制中提供一fd_set的数据结构,实际上是一long类型的数组,
每一个数组元素都能与一打开的文件句柄(不管是Socket句柄,还是其他
文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成,
当调用select()时,由内核根据IO状态修改fd_set的内容,由此来通知执
行了select()的进程哪一Socket或文件可读,下面具体解释:
#include <sys/types.h>
#include <sys/times.h>
#include <sys/select.h>
int select(nfds, readfds, writefds, exceptfds, timeout)
int nfds;
fd_set *readfds, *writefds, *exceptfds;
struct timeval *timeout;
ndfs:select监视的文件句柄数,视进程中打开的文件数而定,一般设为呢要监视各文件
中的最大文件号加一。
readfds:select监视的可读文件句柄集合。
writefds: select监视的可写文件句柄集合。
exceptfds:select监视的异常文件句柄集合。
timeout:本次select()的超时结束时间。(见/usr/sys/select.h,
可精确至百万分之一秒!)
当readfds或writefds中映象的文件可读或可写或超时,本次select()
就结束返回。程序员利用一组系统提供的宏在select()结束时便可判
断哪一文件可读或可写。
- 在socket通讯程序里,select 起到什么作用
- spring在ssh框架中到底起到什么作用
- 在JAVA中线程到底起到什么作用
- spring在ssh框架中到底起到什么作用
- spring在ssh框架中到底起到什么作用
- spring在ssh框架中到底起到什么作用
- 在JAVA中线程到底起到什么作用
- 在JAVA中线程到底起到什么作用
- spring在ssh框架中到底起到什么作用
- 短信验证码是什么?在网站中起到什么作用?
- spring在ssh框架中到底起到什么作用
- 图像在MindManager中能起到什么作用
- 在JAVA中线程到底起到什么作用!
- 在JAVA中线程到底起到什么作用!
- 在JAVA中线程到底起到什么作用!
- StringBuilder sb = new StringBuilder(); 请问这句话在程序中起到什么作用? 请问这句话的意思是什么?
- tbody是什么意思.起到什么作用
- Oracle 内存里的 SGA是如何构成的呢又起到什么作用
- 怎样检查对应的路径是一个链接目录
- 利用WSO2发布数据服务
- winsock中select的作用
- 一个撕心裂肺的爱情故事(转)
- 关于web打印隐藏打印按扭
- 在socket通讯程序里,select 起到什么作用
- “开始->运行”命令大全
- DataBinder.Eval与Bind对比总结
- WebService 建立VBA与Java之间的通信
- 检测隐藏进程
- 用jxl解决jsp/java中excel处理问题
- SQL SERVER学习日志
- Java安装配置
- [转]opencv使用cvFindContours提取联通域