如何设置CONNECT TIMEOUT时间
1个回答
展开全部
1、设置socket为非阻塞模式
2、connect()连接
3、如果出错,用select()系统调用对其进行超时检测,看在世罩尺给定的时间内socket是否变得可写
[cpp] view plain copy print?
int fd = socket(PF_INET,SOCK_STREAM,0);
...
int flags = fcntl(fd,F_GETFL,0);
fcntl(fd,F_SETFL,flags | O_NONBLOCK);
int n = connect(fd,(struct sockaddr*)&addr,sizeof addr);
if(n <搜高 0)
{ // EINPROGRESS表示connect正在尝试连接
if(errno != EINPROGRESS && errno != EWOULDBLOCK)
return 1;
struct timeval tv;
tv.tv_sec = 10;
tv.tv_usec = 0;
fd_set wset;
FD_ZERO(&wset);
FD_SET(fd,&wset);
n = select(fd+1,NULL,&wset,NULL,&tv);
if(n < 0)
{ // select出错
perror("select()");
close(fd);
return 1;
}
else if (0 == n)
{ // 超时
cerr<< "Timeout." << endl;
close(fd);
return 1;
}
else
{ // 连接成功
cerr << "Connectd." <<endl;
}
}
fcntl(fd,F_SETFL,flags & ~O_NONBLOCK); //闷敬 设为阻塞模式
2、connect()连接
3、如果出错,用select()系统调用对其进行超时检测,看在世罩尺给定的时间内socket是否变得可写
[cpp] view plain copy print?
int fd = socket(PF_INET,SOCK_STREAM,0);
...
int flags = fcntl(fd,F_GETFL,0);
fcntl(fd,F_SETFL,flags | O_NONBLOCK);
int n = connect(fd,(struct sockaddr*)&addr,sizeof addr);
if(n <搜高 0)
{ // EINPROGRESS表示connect正在尝试连接
if(errno != EINPROGRESS && errno != EWOULDBLOCK)
return 1;
struct timeval tv;
tv.tv_sec = 10;
tv.tv_usec = 0;
fd_set wset;
FD_ZERO(&wset);
FD_SET(fd,&wset);
n = select(fd+1,NULL,&wset,NULL,&tv);
if(n < 0)
{ // select出错
perror("select()");
close(fd);
return 1;
}
else if (0 == n)
{ // 超时
cerr<< "Timeout." << endl;
close(fd);
return 1;
}
else
{ // 连接成功
cerr << "Connectd." <<endl;
}
}
fcntl(fd,F_SETFL,flags & ~O_NONBLOCK); //闷敬 设为阻塞模式
大雅新科技有限公司
2024-11-19 广告
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,...
点击进入详情页
本回答由大雅新科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询