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中如何设置连接超时 (转)相关推荐

  1. golang mysql 超时_golang中mysql建立连接超时时间timeout 测试

    本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...

  2. 连接mysql超时时间设置多少_怎么设置数据库的连接数和连接超时时间

    如何设置数据库的连接数和连接超时时间 连接数的话可以修改spfile文件来约束 查看当前的连接数: select count(*) from v$process; –数据库允许的最大连接数: sele ...

  3. golang中mysql建立连接超时时间timeout 测试

    本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为 ...

  4. Sql超时时间已到,在操作完成之前超时时间已过或服务器未响应。

    随着数据库数据的不断增大,查询时间也随之增长.而客户端与数据库连接时间以及命令的执行时间都是有限的.默认为30s. 所以在查询数据的时候,程序会出现 "超时时间已到.在操作完成之前超时时间已 ...

  5. linux mint 17 输入法,LinuxMint17.1 Rebecca中安装设置输入法

    LinuxMint14使用了几年一直未更新,突然想去更新一下去发现源已经不支持了,所以就直接安装了最新版本. 安装好以后发现还是跟以前一样的毛病,没有中文输入法,直接sudo aptitude ins ...

  6. 【java中处理http连接超时的方法】

    声明一个boolean公共变量,表明当前httpconnection是否得到服务器回应. 你的连接线程中在连接之前置这个变量为false; 另起一个监视线程,拿到那个HttpConnection的连接 ...

  7. 【错误记录】GitHub 提交代码失败、获取代码失败、连接超时、权限错误、ping 请求连接超时 ( 查找域名对应 IP | 设置 host 文件 )

    文章目录 一. 报错信息 二. 解决方案 ( 查找域名 ) 三. 解决方案 ( 测试 IP 地址 ) 四. 解决方案 ( 配置 hosts ) 网上有很多类似的解决方案 , 给出了一个 hosts 配 ...

  8. android 横屏竖屏设置,Android中强制设置横屏与竖屏,与横竖屏生命周期的设置

    许多小的知识点,是面试中经常会被提问到的,面试题也方式也会不一样,比如,让你在配置文件中设置Activity 为竖屏模式,答题方式是把相关的配置节点代码也给写出来,多少有点懵逼... 全屏 在Acti ...

  9. html中热区如何设置,Dreamweaver中如何设置热区?DW设置热区方法图解

    Dreamweaver中如何设置热区?下面小编就为大家详细介绍一下,一起来看看吧! 方法/步骤 向平时一样,这里我们在设置Dreamweaver热区的时候.同样这里是需要建立一个新的HTML界面的. ...

  10. java中utf-8怎么设置_eclipse中UTF-8设置

    eclipse中UTF-8设置 1.windows->Preferences 打开"首选项"对话框: 2.然后,general->Workspace,右侧Text fi ...

最新文章

  1. 3.Java集合-HashSet实现原理及源码分析
  2. 解决IOS滑动页面fixed浮动问题
  3. .CN域名总量达1090.6万个:8月份共净增13.8万个
  4. 话里话外:成功实施ERP要做到的几个关注点
  5. AngularJS中的过滤器(filter)
  6. 分析师:Apple不会在2022年发布OLED iPad Air
  7. 自动设定form的高度_自动升降车
  8. java表头表体动态返回_JAVA LIST 简单分页 集成EXT4 grid表头动态返回
  9. mysql的常见命令与语法规范
  10. 简单的java恶搞小病毒_恶搞电脑病毒代码有哪些
  11. Java基础——动态数组
  12. 干货分享|Research Essay写作的规范及步骤详解
  13. linux硬盘的两个分区合并_linux新加硬盘合并
  14. hive分隔符_hive默认分隔符
  15. 四阶幻方c语言编程,13年 第四届 蓝桥杯C语言C组 第4题 幻方填空
  16. Power BI 自定义门户----大成
  17. 使用爬虫爬取天气历史数据(https://lishi.tianqi.com/)
  18. vue组件间通信六种方式
  19. Java 获取本机局域网内IP
  20. 信息奥赛一本通 三角形最佳路径问题 (1288) 题解

热门文章

  1. JMetro版本11.6.8和8.6.8发布
  2. 设计模式 生成器_生成器设计模式的应用
  3. 垃圾收集算法,垃圾收集器_您正在使用什么垃圾收集器?
  4. 内存heap_哪个内存更快?Heap或ByteBuffer或Direct?
  5. 使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行
  6. ehcache rmi_EhCache复制:RMI与JGroups
  7. 通过示例Hibernate–第2部分(DetachedCriteria)
  8. spring pojo_使用Spring将POJO公开为JMX MBean
  9. Java EE 7 / JAX-RS 2.0 – REST上的CORS
  10. JAXB –新手的观点,第2部分