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,判断服务器的网络是连通的,而不能判断是否开放了端口.我们知道端口属于网络的传输层, ...
随机推荐
- mysql中实现行号,oracle中的rowid
mysql中实现行号需要用到MYSQL的变量,因为MySql木有rownumber. MYSQL中变量定义可以用 set @var=0 或 set @var:=0 可以用=或:=都可以,但是如果变量用 ...
- Java 编程:如何提高性能?(简单总结篇)
开发者在编程中除了要有编程规范,还要注意性能,在 Java 编程中有什么提高性能的好办法呢? 本文转自国内 ITOM 行业领军企业 OneAPM Cloud Insight(一款能够优雅监控多种操作系 ...
- python image模块
Image 模块 Image 模块提供了同名的类用来表示PIL的图像.Image模块还提供了许多工厂(factory)函数,包块从文件加载图像的函数,以及创建新图像的函数. 例子 下面的脚本加 ...
- HDU 1166 敌兵布阵(线段树 单点更新)
点我看题目 题意 :HDU的中文题也不常见....这道题我就不详述了..... 思路 :这个题用线段树用树状数组都可以,用线段树的时候要注意输入那个地方,输入一个字符串的时候不要紧接着输入两个数字 ...
- HDU4521+线段树+dp
题意:在一个序列中找出最长的某个序列.找出的序列满足题中的条件. 关键:对于 第 i 个位置上的数,要知道与之相隔至少d的位置上的数的大小.可以利用线段树进行统计,查询.更新的时候利用dp的思想. / ...
- 一个字 word 是16位, 一个字由两个字节组成 , 字节=byte ,一个字节8位, 位=bit 如果没有特殊说明kb 就是指 k*bit
一个字 word 是16位, 一个字由两个字节组成 , 字节=byte,,一个字节8位, 位=bit 如果没有特殊说明kb 就是指 k*bit kbyte= k*byte
- 用C++ 设计一个不能被继承的类
http://blog.sina.com.cn/s/blog_69d9bff30100odlz.html 在Java 中定义了关键字final ,被final 修饰的类不能被继承.但在C++ 中没有f ...
- tbr tbn tbc
http://tech.bobgo.net/?m=201004 因为最近的工作需要从MP4视频中提取一些关键帧,要了解如何将视频的时间点转换为对应的帧号,所以查阅了一些关于视频编解码以及时间同步方式的 ...
- 查找Form的文件名
我们经常会要在ORACLE EBS中寻找我们正在浏览的form页面的执行文件,我们都会直接在Help中的菜单里点击"About Oracle Application",然后查看当前 ...
- linux 内核驱动--Platform Device和Platform_driver注册过程
linux 内核驱动--Platform Device和Platform_driver注册过程 从 Linux 2.6 起引入了一套新的驱动管理和注册机制 :Platform_device 和 Pla ...