如何设置CONNECT TIMEOUT时间

 我来答
蓉卓彧卓
2017-06-07 · TA获得超过152个赞
知道小有建树答主
回答量:295
采纳率:0%
帮助的人:208万
展开全部
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); //闷敬 设为阻塞模式
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式