linux socket默认超时时间设置,Socket中如何设置连接超时 (转)
Socket中如何设置连接超时 (转)
Socket中如何设置连接超时
AntGhazi/2001.12.14 主页:antghazi.yeah
把CSDN与中文翻了底朝天,也没找到如何设置socket的连接超时的满意方法,问此问题的兄弟已有一大堆,这里偶就讲一下win下如何设置socket的connect超时。
设置connect的超时很简单,CSDN上也有人提到过使用,但却没有一个令人满意与完整的答案。偶所讲的也正是select,此函数集成在winsock1.1中,简单点讲,"作用使那些想避免在套接字过程中被锁定的应用,采取一种有序的方式,同时对多个套接字进行管理"(《技术》原话)。使用方法与解释请见《Windows网络编程技术》。
在使用此函数前,需先将socket设置为非锁定,这样,在connect时,才会立马跳过,同时,通常也会产生一个WSAEWOULLOCK错误,这个错误没关系。再select则是真正的超时。
WSADATA wsd;
SOCKET cClient;
int ret;
struct sockaddr_in server;
hostent *host=NULL;
if(Wtartup(MAKE(2,0),&wsd)){return 0;}
cClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(cClient==INVALID_SOCKET){return 0;}
//set Recv and Send time out
int TimeOut=6000; //设置发送超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
return 0;
}
TimeOut=6000;//设置接收超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
return 0;
}
//设置非阻塞方式连接
unsigned long ul = 1;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)return 0;
//连接
server.sin_family = AF_INET;
server.sin_port = htons(25);
server.sin_addr .s_addr =_addr((LPCSTR)pSmtp);
if(server.sin_addr.s_addr == INADDR_NONE){return 0;}
connect(cClient,(const struct sockaddr *)&server,sizeof(server));
//select 模型,即设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(cClient, &r);
timeout.tv_sec = 15; //连接超时15秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
::closesocket(cClient);
return 0;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR){
::closesocket (cClient);
return 0;
}
如有不明或错误的地方,欢迎指正.
to:antghazi@163.net">mailto:antghazi@163.net
AntGhazi/2001.12.14
linux socket默认超时时间设置,Socket中如何设置连接超时 (转)相关推荐
- golang mysql 超时_golang中mysql建立连接超时时间timeout 测试
本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...
- 连接mysql超时时间设置多少_怎么设置数据库的连接数和连接超时时间
如何设置数据库的连接数和连接超时时间 连接数的话可以修改spfile文件来约束 查看当前的连接数: select count(*) from v$process; –数据库允许的最大连接数: sele ...
- golang中mysql建立连接超时时间timeout 测试
本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...
- Sql超时时间已到,在操作完成之前超时时间已过或服务器未响应。
随着数据库数据的不断增大,查询时间也随之增长.而客户端与数据库连接时间以及命令的执行时间都是有限的.默认为30s. 所以在查询数据的时候,程序会出现 "超时时间已到.在操作完成之前超时时间已 ...
- linux mint 17 输入法,LinuxMint17.1 Rebecca中安装设置输入法
LinuxMint14使用了几年一直未更新,突然想去更新一下去发现源已经不支持了,所以就直接安装了最新版本. 安装好以后发现还是跟以前一样的毛病,没有中文输入法,直接sudo aptitude ins ...
- 【java中处理http连接超时的方法】
声明一个boolean公共变量,表明当前httpconnection是否得到服务器回应. 你的连接线程中在连接之前置这个变量为false; 另起一个监视线程,拿到那个HttpConnection的连接 ...
- 【错误记录】GitHub 提交代码失败、获取代码失败、连接超时、权限错误、ping 请求连接超时 ( 查找域名对应 IP | 设置 host 文件 )
文章目录 一. 报错信息 二. 解决方案 ( 查找域名 ) 三. 解决方案 ( 测试 IP 地址 ) 四. 解决方案 ( 配置 hosts ) 网上有很多类似的解决方案 , 给出了一个 hosts 配 ...
- android 横屏竖屏设置,Android中强制设置横屏与竖屏,与横竖屏生命周期的设置
许多小的知识点,是面试中经常会被提问到的,面试题也方式也会不一样,比如,让你在配置文件中设置Activity 为竖屏模式,答题方式是把相关的配置节点代码也给写出来,多少有点懵逼... 全屏 在Acti ...
- html中热区如何设置,Dreamweaver中如何设置热区?DW设置热区方法图解
Dreamweaver中如何设置热区?下面小编就为大家详细介绍一下,一起来看看吧! 方法/步骤 向平时一样,这里我们在设置Dreamweaver热区的时候.同样这里是需要建立一个新的HTML界面的. ...
- java中utf-8怎么设置_eclipse中UTF-8设置
eclipse中UTF-8设置 1.windows->Preferences 打开"首选项"对话框: 2.然后,general->Workspace,右侧Text fi ...
最新文章
- 3.Java集合-HashSet实现原理及源码分析
- 解决IOS滑动页面fixed浮动问题
- .CN域名总量达1090.6万个:8月份共净增13.8万个
- 话里话外:成功实施ERP要做到的几个关注点
- AngularJS中的过滤器(filter)
- 分析师:Apple不会在2022年发布OLED iPad Air
- 自动设定form的高度_自动升降车
- java表头表体动态返回_JAVA LIST 简单分页 集成EXT4 grid表头动态返回
- mysql的常见命令与语法规范
- 简单的java恶搞小病毒_恶搞电脑病毒代码有哪些
- Java基础——动态数组
- 干货分享|Research Essay写作的规范及步骤详解
- linux硬盘的两个分区合并_linux新加硬盘合并
- hive分隔符_hive默认分隔符
- 四阶幻方c语言编程,13年 第四届 蓝桥杯C语言C组 第4题 幻方填空
- Power BI 自定义门户----大成
- 使用爬虫爬取天气历史数据(https://lishi.tianqi.com/)
- vue组件间通信六种方式
- Java 获取本机局域网内IP
- 信息奥赛一本通 三角形最佳路径问题 (1288) 题解
热门文章
- JMetro版本11.6.8和8.6.8发布
- 设计模式 生成器_生成器设计模式的应用
- 垃圾收集算法,垃圾收集器_您正在使用什么垃圾收集器?
- 内存heap_哪个内存更快?Heap或ByteBuffer或Direct?
- 使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行
- ehcache rmi_EhCache复制:RMI与JGroups
- 通过示例Hibernate–第2部分(DetachedCriteria)
- spring pojo_使用Spring将POJO公开为JMX MBean
- Java EE 7 / JAX-RS 2.0 – REST上的CORS
- JAXB –新手的观点,第2部分