Windows 设置connect超时

 1 //tcpclient.h
 2 #ifndef TCPCLIENT_H
 3 #define TCPCLIENT_H
 4 #include <winsock2.h>
 5 #include <ws2tcpip.h>
 6 #include <iostream>
 7 #include <cstdio>
 8
 9
10 extern SOCKET ConnectSocket;
11 int ConnectSer();
12
13 #endif // TCPCLIENT_H
 1 //tcpclient.c
 2 #include "tcpclient.h"
 3
 4 using namespace std;
 5
 6 // Need to link with Ws2_32.lib
 7 //#pragma comment(lib, "ws2_32.lib")
 8 SOCKET ConnectSocket;                       //定义连接Socket,在发送接收时使用
 9 /*******************************************************
10 ** 函数名称 : ConnectSer
11 ** 函数功能 : 连接服务器
12 ** 输   入 : 无
13 ** 输    出: 无
14 ** 备    注: 服务器IP:192.168.5.1      PORT:8010     超时连接:1s
15 ********************************************************/
16 int ConnectSer()
17 {
18     //----------------------
19     // Initialize Winsock
20     bool ret = false;
21     int error = -1;
22     int len = sizeof(int);
23     WSADATA wsaData;
24     int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
25     if (iResult != NO_ERROR) {
26         ret = false;
27         return ret;
28     }
29     //----------------------
30     // Create a SOCKET for connecting to server
31     ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
32     if (ConnectSocket == INVALID_SOCKET) {
33         WSACleanup();
34         ret = false;
35         return ret;
36     }
37     //----------------------
38     // The sockaddr_in structure specifies the address family,
39     // IP address, and port of the server to be connected to.
40     sockaddr_in clientService;
41     clientService.sin_family = AF_INET;
42     clientService.sin_addr.s_addr = inet_addr("192.168.5.1");
43     clientService.sin_port = htons(8010);
44
45     //连接超时1秒
46     struct timeval timeout ;
47     fd_set r;
48     unsigned long ul = 1;
49     ioctlsocket(ConnectSocket, FIONBIO,&ul);   //设置为非阻塞模式
50     //如果连接失败,则设置超时
51     if(-1 == connect(ConnectSocket, (SOCKADDR *) &clientService, sizeof(clientService) )){
52         FD_ZERO(&r);
53         FD_SET(ConnectSocket, &r);
54         timeout.tv_sec = 1; //连接超时1秒
55         timeout.tv_usec =0;
56         if( select(0, NULL, &r, NULL, &timeout) > 0 ){
57             getsockopt(ConnectSocket, SOL_SOCKET, SO_ERROR, (char *)&error, /*(socklen_t *)*/&len);
58             if(error == 0)
59                 ret = true;
60             else
61                 ret = false;
62         }
63         else
64             ret = false;
65     }
66     //如果连接成功,返回ret置1
67     else
68         ret = true;
69     ul = 0;
70     ioctlsocket(ConnectSocket, FIONBIO, &ul); //设置为阻塞模式 阻塞时间为timeout时间
71     return ret;
72 }
时间: 2024-11-25 13:04:15

Windows 设置connect超时的相关文章

VC socket Connect 超时时间设置

设置connect超时很简单,CSDN上也有人提到过使用select,但却没有一个令人满意与完整的答案.偶所讲的也正是select函数,此函数集成在winsock1.1中,简单点讲,"作用使那些想避免在套接字调用过程中被锁定的应用程序,采取一种有序的方式,同时对多个套接字进行管理"(<Windows网络编程技术>原话).使用方法与解释请见<Windows网络编程技术>. 在使用此函数前,需先将socket设置为非阻塞模式,这样,在connect时,才会立马跳过,

C Socket编程之Connect超时 (转)

网络编程中socket的分量我想大家都很清楚了,socket也就是套接口,在套接口编程中,提到超时的概念,我们一下子就能想到3个:发送超时,接收超时,以及select超时(注:select函数并不是只用于套接口的,但是套接口编程中用的比较多),在connect到目标主机的时候,这个超时是不由我们来设置的.不过正常情况下这个超时都很长,并且connect又是一个阻塞方法,一个主机不能连接,等着connect返回还能忍受,你的程序要是要试图连接多个主机,恐怕遇到多个不能连接的主机的时候,会塞得你受不

HttpClient 4.5版本设置连接超时时间

HttpClient升级到4.5版本后,API有很多变化,HttpClient 4之后,API一直没有太稳定,我感觉4.5版本抽象后,很多API应该快稳定了. 使用HttpClient,一般都需要设置连接超时时间和获取数据超时时间.这两个参数很重要,目的是为了防止访问其他http时,由于超时导致自己的应用受影响. 4.5版本中,这两个参数的设置都抽象到了RequestConfig中,由相应的Builder构建,具体的例子如下: CloseableHttpClient httpclient = H

玩转Windows服务系列&mdash;&mdash;Windows服务启动超时时间

最近有客户反映,机房出现断电情况,服务器的系统重新启动后,数据库服务自启动失败.第一次遇到这种情况,为了查看是不是断电情况导致数据库文件损坏,从客户的服务器拿到数据库的日志,进行分析. 数据库工作机制 要分析数据库启动失败的原因,首先说明一下数据库服务的工作机制. 数据库分为六大服务: 数据库的六大服务之间存在依赖关系,及启动流程: 服务自动启动失败原因 从客户那里,拿到了两份日志,一份是开机自启动的日志信息,此次数据库启动失败.另外一份是开机后,手动启动数据库服务的日志信息,此次数据库启动成功

Linux下connect超时处理

1.前言 最近在写一个测试工具,要求快速的高效率的扫描出各个服务器开放了哪些端口.当时想了一下,ping只能检测ip,判断服务器的网络是连通的,而不能判断是否开放了端口.我们知道端口属于网络的传输层,因此需要用ip和端口来探测,这个时候就可以用connect来探测一下,针对TCP协议,connect函数要进行TCP三次握手,如果connect成功,则说明服务器开放了某个端口,如果connect失败,则说明服务器没有开放某个端口.而connect失败是通过超时来控制的,在规定的时间内,connec

HTTP请求的python实现(urlopen、headers处理、 Cookie处理、设置Timeout超时、 重定向、Proxy的设置)

## python实现HTTP请求的三中方式:urllib2/urllib.httplib/urllib 以及Requests urllib2/urllib实现 urllib2和urllib是python两个内置的模块,要实现HTTP功能,实现方式是以urllib2为主,urllib为辅 1 首先实现一个完整的请求与响应模型 urllib2提供基础函数urlopen, import urllib2 response = urllib2.urlopen('http://www.cnblogs.co

select 设置发送超时发送注意事项

//设置发送超时你只发送, 并发送足够多的数据以填满发送缓冲区, 接收端一直不接收.发送端一量满发送缓冲区就会阻塞, 如果你设置了发送超时, 超时到了它就会返回发送超时了. 在send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,而设置收发超时控制: 在Linux下需要注意的是时间的控制结构是struct timeval而并不是某一整型数,以下是来自于网上一篇文章中的摘录,它是这样写的:int nNetTimeout=1000;//1秒,//设置发送超时setsockopt(

WebSphere设置会话超时时间

WebSphere Application Server的会话超时时间可以在三个层面进行设置,分别为:应用程序服务器级别.应用程序级别和代码层面进行设置. 设置方式:应用程序级别级别和应用级别可以通过WAS的管理控制台进行设置,而代码层面则需要在Web应用的部署描述符文件中手动设置超时时间: 作用范围:应用程序服务器级别设置的超时时间作用于为整个应用程序服务器,部署在该应用程序服务器中的应用均采用此设置:应用程序级别和代码级别的设置只作用于当前应用程序: 优先级别:应用程序服务器级别 < 应用程

Windows 设置Mongodb

安装MongoDB 将解压所得的bin文件夹内文件部署于C:\mongodb\bin 建立数据库文件夹 C:\mongodb\data\db 准备以下内容的配置文件mongodb.cfg dbpath=C:\mongodb\data\db #数据库路径 logpath=C:\mongodb\data\log\mongo.log #日志输出文件路径 logappend=true #错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件 journa