Socket中如何设置连接超时

apache axis 框架处理https请求时超时时间设置问题 背景:同事发现我们系统和一个外部公司http交互消耗时间比较长,偶尔会达到10分多钟,但是明明设置了20s超时的呀。 于是我找到代码过来分析: private String send(String param0, String requestXml) { CHANNEL_LOG.info("xxxx:" + requestXml); String response = 阅读详情

1. create socket

 struct sockaddr_in addr;
 addr.sin_family = AF_INET;

 // Server address
 addr.sin_addr.s_addr = inet_addr(host);
 // Server port
 addr.sin_port = htons(port);

 // Creating socket
 if ((soc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
  throw connector_exception("connector: can't create socket");

2. connect

 if (::connect(soc, (struct sockaddr *) &addr, sizeof(addr)) == SOCKET_ERROR)
  throw connector_exception("connector: can't connect.");

3. 设置为非阻塞式socket

   unsigned long ul = 1;
   int ret = ioctlsocket(rec(), FIONBIO, (unsigned long*)&ul);
   if(ret==SOCKET_ERROR)
    log <<"ioctlsocket error" << endl;
4. select socket

   FD_ZERO(&r_readfds);FD_ZERO(&r_exfds);
  FD_SET(rec(), &r_readfds);FD_SET(rec(), &r_exfds);
 if ((iret=select(0,&r_readfds, NULL,&r_exfds,&tv))==SOCKET_ERROR){
每次调用好select后,select 函数自动把r_readfds,r_exfds都设为空,必须重新调用
FD_ZERO(&r_readfds);FD_ZERO(&r_exfds);
FD_SET(rec(), &r_readfds); FD_SET(rec(), &r_exfds);  否则会报10022 WSAEINVAL 错误因为select如果超时会自动清空r_readfds,r_exfds。但是如果不超时,则不清空,所以要调用FD_ZERO(&r_readfds);FD_ZERO(&r_exfds);保证清空

5 参考文献

http://support.microsoft.com/kb/q147714/

socket连接设置超时的几种方法 <br />1.alarm方法<br /> http://hi.baidu.com/ppln/blog/item/0523d3090731689d0a7b8200.html<br /> #include<stdio.h><br /> #include<unistd.h><br /> #include<string.h><br /> #include<sys/types.h><br /> #include<sys/socket.h><br /> #include<netinet/in.h><br 阅读详情

相关推荐

解决java Socket慢的问题

最近本人在业余时间想使用socket写一个访问网页的工具类,用来了解http。在编写过程中发现,一个大概是5k的图片,用代码去下载时候用了足足30秒,但是在浏览器中访问同一个链接的时候只用了3ms,这个中间的差距我实在不能够接收。我是做了什么,我编写的代码这么慢。经过我在谷歌上搜索发现read()方法当读取完数据之后就开始阻塞,等待返回-1结束,这个等待的过程占到了总时间的99%。可是如果不等待怎么

奋斗的斗斗的专栏 6590

如何设置socket通信的连接超时

在建立socket连接时可以很容易设置socket通信的发送和接收超时时间,但是在建立socket通信时,如果是Win98系统,则如果连接失败,则程序会一直等待在哪里,Windows2000默认超时时间是30秒,当然,这个超时时间不算长,但是加入我们要循环扫描一系列端口并且建立连接的话,总的等待时间就会让人忍受不了,下面就以delphi为例进行说明,如何在建立socket的时候设置超时时间

haoyuenan的专栏 6243

SSL_connect 连接超时的处理方法

问题:一个简单的用例分析。 环境: [root@localhost ~/test/ssl_test] # uname -a Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux 拓扑:localhost ±------...

daa20的专栏 1万+

C# Socket连接超时设置

问题描述: 对于C# Socket没有超时设置的选项,默认情况下进行Socket连接,返回连接失败需要20-30s时间,严重影响用户体验 问题解决: Socket服务器端: Socket客户端: IAsyncResult.AsyncState 返回一个对象,该对象时启动异步操作的方法的最后一个参数 注: 在Socket客户端进行超时连...

djpmsoa95092的博客 1010

java socket连接超时_Java中Socket设置连接超时的代码

Java中Socket设置连接超时的代码大家都知道Java的Socket如果连接不到指定IP和Port的主机,就会抛出IOException异常,而通常情况下,从连接到出现IOException会有一段不定的时长,就是所谓的超时时长,如果超时时长过长,在开发时会影响测试,如果代码成了产品,又会非常的影响用户体验,那么要怎么设置这个时长呢?今天百分网小编为大家整理的Java中Socket设置连接超时...

weixin_34746715的博客 700

如何设置socket连接超时

把CSDN与中文yahoo翻了底朝天,也没找到如何设置socket连接超时的满意方法,问此问题的兄弟已有一大堆,这里偶就讲一下win下如何设置socket的connect超时设置connect的超时很简单,CSDN上也有人提到过使用select,但却没有一个令人满意与完整的答案。偶所讲的也正是select函数,此函数集成在winsock1.1中,简单点讲,"作用使那些想避免在套接字调用过程

msbbc的专栏 1038

Socket 关于设置Socket连接超时时间

参考链接: https://www.iteye.com/blog/cuisuqiang-1725348 socket的读写是阻塞的,soTimeout是socket读写超时,而不是链接超时。 setSoTimeout public void setSoTimeout(int timeout) throws SocketException启用/禁用带有指定超时值的 SO_TIMEOU...

皮卡丘的博客 5409

java socket超时_Socket 关于设置Socket连接超时时间

做网络编程的人对setSoTimeout方法一定很熟悉,都知道是设置连接超时时间!但是我在网上找资料时发现很多人把这个超时时间理解成了链路的超时时间!我看了一下JDK 关于这个方法的说明,其实根本不是链路的超时时间!setSoTimeoutpublic void setSoTimeout(int timeout)throws SocketException启用/禁用带有指定超时值的 SO_TIM...

weixin_31648507的博客 1746

java设置连接超时_Java中Socket设置连接超时的代码分享

前言大家都知道Java的Socket如果连接不到指定IP和Port的主机,就会抛出IOException异常,而通常情况下,从连接到出现IOException会有一段不定的时长,就是所谓的超时时长,如果超时时长过长,在开发时会影响测试,如果代码成了产品,又会非常的影响用户体验,那么要怎么设置这个时长呢?下面来一起看看详细的介绍:Socket的类提供了一个方法:public void connect...

weixin_33147645的博客 583

linux socket默认超时时间设置,Socket中如何设置连接超时 (转)

Socket中如何设置连接超时 (转)Socket中如何设置连接超时AntGhazi/2001.12.14 主页:antghazi.yeah把CSDN与中文翻了底朝天,也没找到如何设置socket连接超时的满意方法,问此问题的兄弟已有一大堆,这里偶就讲一下win下如何设置socket的connect超时设置connect的超时很简单,CSDN上也有人提到过使用,但却没有一个令人满意与完整的答案...

weixin_39911007的博客 2133

Linux设置socket连接超时

Linux设置socket连接超时(异步连接)   转载▼ 标签:  linux   socket   connect   超时   it 分类: Linux & C 1.首先将标志位设为Non-blocking模式,准备在非阻塞模式下调用connect函数 2.调用connect,正常情况下,因

cuiyifang的专栏 8357
下一篇: VC快捷键大全
johnywy
博客等级 码龄24年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值