目的:设定一个时间值,如果超出这个时间值,例如60秒,Select函数退出
现象:第一次可以等待60秒后,退出Select函数,但是第二次进入Select函数后,瞬间就会退出,根本不会等待60秒,屏幕上“time is out"不间断的出现部分代码:
//设置超时时间
timeval *ptimeval = new timeval;
ptimeval.tv_sec = 60;
ptimeval.tv_usec = 10;m_Exit = FALSE;while( m_Exit != TRUE)
{
select( maxfds, &readfds, &writefds, &exceptfds,ptimeval);
cout << “ time is out…”<< endl;
);
我想了很久也闹不明白是怎么回事,请各位大侠出手相救!
现象:第一次可以等待60秒后,退出Select函数,但是第二次进入Select函数后,瞬间就会退出,根本不会等待60秒,屏幕上“time is out"不间断的出现部分代码:
//设置超时时间
timeval *ptimeval = new timeval;
ptimeval.tv_sec = 60;
ptimeval.tv_usec = 10;m_Exit = FALSE;while( m_Exit != TRUE)
{
select( maxfds, &readfds, &writefds, &exceptfds,ptimeval);
cout << “ time is out…”<< endl;
);
我想了很久也闹不明白是怎么回事,请各位大侠出手相救!
解决方案 »
- 关于Word控件的开发问题
- 如何更改cedit里面的右键菜单,默认的那个菜单
- 有人可以帮我解决这个问题吗?谢谢大家了,关于虚拟键盘的问题。
- 一个汉字转换拼音的问题
- 求可将录音内容直接保存成MP3的VC程序,谢谢!!!
- 检测网线插还是没插,我搜了很多检测网络状态的帖子,但我只要检测插还是没插,我搞不定了,高手们救命呀。
- 为什么我的VC++找不到afxres.h?
- 如何在一个分割成的窗口中加工具栏?
- socket 程序如何穿越防火墙,代理服务器,NAT呢?
- 烦请高手指点一下
- 大家帮帮我看看这个问题,急啊!!为什么我作了2个文件,在vc下打开却不对啊?高分送,分不够,再送!
- 请教3个问题,来赚分啦.........
{
FD_ZERO(*set)
FD_SET(s, *set) select( maxfds, &readfds, &writefds, &exceptfds,ptimeval);
cout << “ time is out…”<< endl; //FD_ISSET(s, *set) ); 关于 select 的使用,请看《windows 网络编程技术》p176
正確的做法是每次調用select之前都設置超時的時間值。
不同意。
int nfds,
fd_set FAR * readfds,
fd_set FAR * writefds,
fd_set FAR * exceptfds,
const struct timeval FAR * timeout
);
在Window中,时间是不会被改变的,因为有const.
这个说明同时见<UNIX网络编程(第1卷)> 第127页.为了便于向的Linux的移植,需要在 select之前都設置超時的時間值.int sockfd;
fd_set fdR;
struct timeval timeout = ..;
...
for(;;) {
FD_ZERO(&fdR);
FD_SET(sockfd, &fdR);
switch (select(sockfd + 1, &fdR, NULL, &timeout)) {
case -1:
error handled by u;
case 0:
timeout hanled by u;
default:
if (FD_ISSET(sockfd)) {
now u read or recv something;
/* if sockfd is father and
server socket, u can now
accept() */
}
}
}
所以瞬间返回,每次将readfds的fd_count值设为1,则功能正常实现。