tcp中设置连接超时
直接上代码:
设置连接超时
//首先改成非阻塞套接字 unsigned long ul=;
int rm=ioctl(sConnect,FIONBIO,(unsigned long*)&ul);
if(rm==-)
{
printf("ioctl noblock error!\n");
close(sConnect);
return -;
} //向服务器发出连接请求
int err = connect(sConnect, (struct sockaddr*)&addrServer, sizeof(addrServer)); //正常返回EINPROGRESS if(err && errno!=EINPROGRESS)
{
printf("cannot connect:%s\n",severAgent);
return -;
} //有可能返回0
if (err==)
{
printf("connect suceess!");
} else
{
struct timeval tv;
fd_set /*r,*/w;
// FD_ZERO(&r);
FD_ZERO(&w);
// FD_SET(sConnect,&r);
FD_SET(sConnect,&w);
tv.tv_sec=m_conTimeout;
tv.tv_usec=;
int retval = select(sConnect+,,&w,,&tv);
if(retval==-)
{
printf("select error\n");
return -;
}
else if(retval == )
{
printf("connect timeout\n");
return -;
}
else
{
int er;
socklen_t len = sizeof(er);
if (getsockopt(sConnect, SOL_SOCKET, SO_ERROR, (char *)&er, &len) < ) {
//getsockopt()失败,进行错处理
printf("getsockopt error\n");
return -;
}
if (er != ) {
//connect()失败,进行错处理
printf("connect error\n");
return -;
}
}
}
//改为阻塞
ul=;
rm=ioctl(sConnect,FIONBIO,(unsigned long*)&ul);
if(rm==-)
{
printf("ioctl block error!\n");
close(sConnect);
return -;
}
值得注意的是:linux中,如果服务器的地址无效,则以上超时过程正常。如果服务器地址有效,但是服务程序未开启,则直接返回错误,也就是说超时过程不起作用,说明是已经做了目标网络检测了。
但是window中,同样是以上的代码,如果服务器的地址无效,则以上超时过程正常。如果服务器地址有效,但是服务程序未开,以上超时过程也是正常的。
二者还是有点区别的。
tcp中设置连接超时的更多相关文章
- [转]c# winform tcp connect timeout 连接超时设置
转自:https://www.cnblogs.com/jhlong/p/5622336.html 简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的 ...
- C# 的tcp Socket设置自定义超时时间
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...
- 转 HttpClient 设置连接超时时间
要: HttpClient 4.5版本升级后,设置超时时间的API又有新的变化,请大家关注. HttpClient升级到4.5版本后,API有很多变化,HttpClient 4之后,API一直没有太稳 ...
- HttpClient设置连接超时时间
https://www.cnblogs.com/winner-0715/p/7087591.html 使用HttpClient,一般都需要设置连接超时时间和获取数据超时时间.这两个参数很重要,目的是为 ...
- Retrofit2.0 设置 连接超时
Retrofit2.0 这个网络请求框架使用了很久了,最近一次出现一个小插曲. 有一个接口,返回的数据量因为业务的原因 会返回很大的数据量,此时网络不大好的情况下,会出现请求失败的情况 也就是回调了 ...
- (转)HttpURLConnection中设置网络超时
转:http://www.xd-tech.com.cn/blog/article.asp?id=37 Java中可以使用HttpURLConnection来请求WEB资源.HttpURLConnect ...
- android 中设置HttpURLConnection 超时并判断是否超时
设置超时: URL url1 = new URL(url); HttpURLConnection conn = (HttpURLConnection) url1.openConnection(); c ...
- SqlConnection 无法设置连接超时
1.最有效的方法:对表格建立索引 2 在连接字符串中设置 Connection Timeout (默认15秒)3 设置 SqlCommand.CommandTimeout(默认是 30 秒)
- connect设置连接超时
转自:庖丁解牛 /** * connect_timeout - 带超时的connect(方法中已执行connect) * @fd:文件描述符 * @addr:地址结构体指针 * @wait_secon ...
随机推荐
- 【转帖】Hadoop — HDFS的概念、原理及基本操作
Hadoop — HDFS的概念.原理及基本操作 https://www.cnblogs.com/swordfall/p/8709025.html 分类: Hadoop undefined 1. HD ...
- 以Unicode(UTF-16 LE)编码保存文本
1. 以二进制方式打开文件,写入BOM头 FILE* pFile = nullptr; _wfopen_s(&pFile, szLogFilePath, L"wb"); / ...
- 进程池和线程池、协程、TCP单线程实现并发
一.进程池和线程池 当被操作对象数目不大时,我们可以手动创建几个进程和线程,十几个几十个还好,但是如果有上百个上千个.手动操作麻烦而且电脑硬件跟不上,可以会崩溃,此时进程池.线程池的功效就能发挥了.我 ...
- cookielib模块 for python3
python2 可以直接安装cookielib模块 而py3却不能安装 故需要安装http模块 举例子: from http import cookiejar cookie = cookiejar.C ...
- 【Maven基础入门】01 Maven的安装与环境变量的配置
写在前面: Mavne,作为一个优秀的项目构建工具,虽说我们平时在使用的时候或多或少的会使用到它,但了解仅限于它能构建项目,然后其他的就不知道了. 以及仓库.POM父类文件.等等. 工欲善其事,必先利 ...
- 解决打开IE报错“无法启动...丢失api-ms-win-core-path-l1-1-0.dll”的问题
打开IE突然发现报错 试了各种方法都不行 最终看这篇文章,才解决:https://www.yijile.com/log/577.html 打开IE设置选项,选择管理加载项,如图讲该选项禁用,就不报错. ...
- 让js中的函数只有一次有效调用
设置隐藏域~ <input type="hidden" value="1" id="flag" /> 其它三种方法
- DbParameter关于Like查询的传参数无效问题
用传参方式模糊查询searchName 按常规的思路,我们会这样写 ,代码如下: String searchName ="Sam"; String strSql = "s ...
- html 随机验证码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 微信小程序代码开源啦
想学习如何使用mpvue开发微信小程序吗? 想知道微信消息推送如何实现吗? 想知道如何用springboot开发小程序后台吗? 看这里就全都有了.耗时一个月打造的微信小程序:PSN折扣助手前后端所有源 ...