iOS 设置connect超时
NSLock *theLock;
[theLock lock];
int fd, error;
struct sockaddr_in addr; if((fd = socket(AF_INET,SOCK_STREAM,))<)
{
cout<<"Error: creating socket failed!\n";
close(fd);
[theLock unlock];
return;
}
int flags = fcntl(fd, F_GETFL,);
fcntl(fd,F_SETFL, flags | O_NONBLOCK);
//设置tcp超时
struct timeval timeo = {,};//你想设置的超时时间
int err = setsockopt(fd,SOL_SOCKET,SO_SNDTIMEO,&timeo,sizeof(timeo));
if (err) {
NSLog(@"设置超时失败");
}
addr.sin_family = AF_INET;
addr.sin_port = htons();
inet_aton([IP UTF8String],&addr.sin_addr); error = connect(fd,(sockaddr*)&addr,sizeof(addr));
//阻塞模式
// if(error!=0)
// {
// cout<<"Error: conecting to server failed!"<<[IP UTF8String]<<endl;
// close(fd);
// [theLock unlock];
// return ;
// }
//
// NSLog(@"Find XiaoMi Server:%@",IP);
//
// close(fd);
// [theLock unlock];
std::cout<<"Scan:"<<[IP UTF8String]<<endl;
//非阻塞模式
if(error < && errno == EINPROGRESS) //errno == EINPROGRESS表示正在建立链接
{
// 等待连接完成,errno == EINPROGRESS表示正在建立链接
fd_set set;
FD_ZERO(&set);
FD_SET(fd,&set); //相反的是FD_CLR(_sock_fd,&set) int retval = select(fd + , NULL, &set, NULL, &timeo); //事件监听
if(retval < )
{
//建立链接错误close(_socket_fd)
}
else if(retval == ) // 超时
{
//超时链接没有建立close(_socket_fd)
} //将检测到_socket_fd读事件或写时间,并不能说明connect成功
if(FD_ISSET(fd,&set))
{
int error = ;
socklen_t len = sizeof(error);
if(getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < )
{
//建立简介失败close(_socket_fd)
}
if(error != ) // 失败
{
//建立链接失败close(_socket_fd)
}
else
{
//建立链接成功
std::cout<<"Find Http:"<<[IP UTF8String]<<endl;
}
}
}
else
{
//出现错误 close(_sock_fd)
}
close(fd);
return;
iOS 设置connect超时的更多相关文章
- linux 设置connect 超时
转载请注明来源:https://www.cnblogs.com/hookjc/ 将一个socket 设置成阻塞模式和非阻塞模式,使用fcntl方法,即: 设置成非阻塞模式: 先用fcntl的F_GET ...
- linux 设置connect 超时代码[select/epoll]
转载请注明来源:https://www.cnblogs.com/hookjc/ linux下socket编程有常见的几个系统调用: 对于服务器来说, 有socket(), bind(),listen( ...
- VC socket Connect 超时时间设置
设置connect超时很简单,CSDN上也有人提到过使用select,但却没有一个令人满意与完整的答案.偶所讲的也正是select函数,此函数集成在winsock1.1中,简单点讲,"作用使 ...
- C Socket编程之Connect超时 (转)
网络编程中socket的分量我想大家都很清楚了,socket也就是套接口,在套接口编程中,提到超时的概念,我们一下子就能想到3个:发送超时,接收超时,以及select超时(注:select函数并不是只 ...
- 设置linux中tcp默认的20秒connect超时时间(转)
无论你用任何语言或者是网络库,你都可以设置网络操作的超时时间,特别是connect.read.write的超时时间. 你可以在代码中把超时时间设置任意大小值,但是connect方法会有一点特殊. co ...
- 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,一般都需要设置连接超时时间和获取数据超时时间.这两个参数很重要,目的是为 ...
- Linux下connect超时处理
1.前言 最近在写一个测试工具,要求快速的高效率的扫描出各个服务器开放了哪些端口.当时想了一下,ping只能检测ip,判断服务器的网络是连通的,而不能判断是否开放了端口.我们知道端口属于网络的传输层, ...
随机推荐
- UIExtendedEdge
在IOS7以后 ViewController 开始使用全屏布局的,而且是默认的行为通常涉及到布局.就离不开这个属性 edgesForExtendedLayout,它是一个类型为UIExtendedEd ...
- apache+tomcat 负载均衡
说明:本篇不面向无开发基础的人员,所以不会有软件下载,jdk安装等步骤.比较久远的东西了...... 1.系统环境 win7-64.jdk 2.软件列表: apache_2.2.24-x64-no-s ...
- 标准初始化css样式表
body { font-size:12px; line-height:1.3; font-family:'微软雅黑', Tahoma,Helvetica,Arial,'宋体', sans-serif; ...
- web中自定义鼠标样式
实现一个功能:鼠标移动到一个图片左边显示左箭头,移动到右边显示右箭头. 实现方法:一个img上面定位两个div,div的样式如下: .toleft { width: 200px; height: 30 ...
- Seven Python Tools All Data Scientists Should Know How to Use
Seven Python Tools All Data Scientists Should Know How to Use If you’re an aspiring data scientist, ...
- 10个基于 Ruby on Rails 构建的顶级站点
本文系国内 ITOM 行业领军企业 OneAPM 工程师翻译整理自 Raviraj Hegde 的文章 Top Sites Built with Ruby on Rails. 就其本身而言,Ruby ...
- sql 中 case when 语法(转)
sql语言中有没有类似C语言中的switch case的语句?? 没有,用case when 来代替就行了. 例如,下面的语句显示中文年月 select ...
- 练习PYTHON之EPOLL
哟,哟,哟,,SELECT,EPOLL之类的,终于出现了. 不能太急了,要缓一缓,缓一缓,再缓一缓~~~~~~~~~ http://scotdoyle.com/python-epoll-howto.h ...
- android Failure [INSTALL_FAILED_OLDER_SDK] 安装apk失败
安装文件与运行环境的skd不匹配 打开源码目录下的AndroidManifest.xml文件,然后注释掉或者删除掉这行: <uses-sdk android:minSdkVersion=&quo ...
- ANDROID_MARS学习笔记_S01原始版_009_SQLite
一.代码1.xml(1)activity_main.xml <?xml version="1.0" encoding="utf-8"?> <L ...