linux下select()中的timeout的设置与不设置问题
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
linux下的select,注意咯,不是pselect。
select()函数的最后一个参数是timeout,用来设置超时用的。
用的是一个struct timeval结构,需要用到sys/time.h文件。
struct timeval {
long tv_sec; 秒
long tv_usec; 毫毛
}
设置了timeout的值之后呢,select在没有文件描述符监视可用的情况下,会等待这个timeout的时间,时间到了select返回0
如果timeout超时之前有文件描述符可用,则返回可用的数量,这时候的timeout则会依然计数,因此如果想要每次都超时一定的时间那么在slelect返回>0的值之后要重新装填timeout的值一次。以保证超时时间没有变化。
如果tv_sec和tv_usec都是0,那么就是超时时间为0,那么select就会立刻返回了。
如果timeout这里是个NULL,那么超时就未被启用,会一直阻塞在监视文件描述符的地方。
在pselect中的timeout更牛X
用到了struct timespec {
long tv_sec; 秒
long tv_nsec; 纳秒
}
时间更精确。
当然了系统做不了这么精确的事情,一般linux的系统精度也就是10ms左右了。
这里说的重点在于timeout的值的选择和处理上。
另外遇到的一个问题是信号SIGALRM会使得select返回-1并置errno为EINTR。但这个信号已经被我的sigaction干掉了函数处理了,这个问题还需要研究一下。
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:23 天前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献3条内容
所有评论(0)