windows下设置socket的connect超时
SOCKET Open(const char* strIP, UINT nPort, int nTimeOut)
{
SOCKET sockfd = NULL;
do
{
sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sockfd <= 0)
{
printf("socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) error=%d\n", WSAGetLastError());
break;
}
unsigned long opt = 1;
//set non-blocking
if (ioctlsocket(sockfd, FIONBIO, &opt) < 0)
{
printf("ioctlsocket(FIONBIO, %d) error=%d\n", opt, WSAGetLastError());
break;
}
struct sockaddr_in serv_addr;
//以服务器地址填充结构serv_addr
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(strIP);
serv_addr.sin_port = htons(nPort);
if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(struct sockaddr)) == -1)
{
if (WSAGetLastError() == WSAEWOULDBLOCK)
{
int error = -1;
int len = sizeof(int);
timeval tv_timeout;
tv_timeout.tv_sec = 0;
tv_timeout.tv_usec = nTimeOut * 1000;
fd_set set;
FD_ZERO(&set);
FD_SET(sockfd, &set);
if (select(sockfd + 1, NULL, &set, NULL, &tv_timeout) > 0)
{
getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char*)&error, &len);
if(error != 0)
{
break;
}
}
else
{ //timeout or select error
break;
}
}
else
{
printf("connect() error=%d\n", WSAGetLastError());
break;
}
}
opt = 0;
//set blocking
if (ioctlsocket(sockfd, FIONBIO, &opt) < 0)
{
printf("ioctlsocket(FIONBIO, %d) error=%d", opt, WSAGetLastError());
break;
}
int iTimeOut = nTimeOut;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&iTimeOut, sizeof(iTimeOut));
setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, (char*)&iTimeOut, sizeof(iTimeOut));
return sockfd;
}
while (FALSE);
closesocket(sockfd);
return NULL;
}
用于connect超时控制。
还有不完善的地方。
高手路过,请不吝赐教。
windows下设置socket的connect超时的更多相关文章
- [转]windows下设置socket的connect超时
原文地址:http://www.cnblogs.com/BloodAndBone/archive/2012/05/22/2513338.html 变相的实现connect的超时,我要讲的就是这个方法, ...
- windows下的socket网络编程
windows下的socket网络编程 windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了, ...
- windows下的socket网络编程(入门级)
windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了,这次因为需要做一个跨平台的网络程序,就先 ...
- winsock教程- windows下的socket编程(c语言实现)
winsock教程- windows下的socket编程(c语言实现) 使用winsock进行socket 编程 这是一个学习windows下socket编程(c语言)的快速指南.这是因为一下 ...
- 在Windows下设置环境变量 运行mysql程序变得更容易
在Windows下设置环境变量,点开始菜单,右键单击我的电脑--属性--高级--环境变量 可以看到PATH的变量是这样的: C:\WINDOWS;C:\WINDOWS\COMMAND 为了让运行m ...
- windows下设置JupyterNotebook默认目录
目录 windows下设置JupyterNotebook默认目录 生成配置文件 设置默认工作目录 设置快捷方式中的目标与起始位置 直接修改anaconda中的相关配置文件 windows下设置Jupy ...
- 一个简单的Windows下的socket程序
服务器端代码server.cpp: #include <stdio.h> #include <WinSock2.h> #pragma comment(lib,"ws2 ...
- Linux下TCP网络编程与基于Windows下C#socket编程间通信
一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...
- Linux和windows下内核socket优化项 (转)
问题: No buffer space available Linux: vi /etc/sysctl.conf net.core.netdev_max_backlog = 30000 每个网络接口 ...
随机推荐
- 怒刷DP之 HDU 1029
Ignatius and the Princess IV Time Limit:1000MS Memory Limit:32767KB 64bit IO Format:%I64d &a ...
- 剑指Offer23 二叉树中和为sum的路径
/************************************************************************* > File Name: 23_FindPa ...
- android 开源库集合的链接列表
1. 内容挺多的 https://github.com/Trinea/android-open-project
- Part 12 Angularjs filter by multiple properties
In the example below, we are using multiple search textboxes. As you type in the "Search name&q ...
- 简单的MySQL数据库主从同步配置
Master配置: 代码如下 复制代码 log-bin = mysql-binserver-id = 1binlog-do-db = powerdns #要同步的数据库 Master新增slave账号 ...
- MySQL写入插入数据优化配置
*innodb_buffer_pool_size 如果用Innodb,那么这是一个重要变量.相对于MyISAM来说,Innodb对于buffer size更敏感.MySIAM可能对于大数据量使用默认的 ...
- JS学习第二课
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 阿里巴巴2013年实习生笔试题A
一.单项选择题 1.下列说法不正确的是:(B) A.SATA硬盘的速度速度大约为500Mbps/s B.读取18XDVD光盘数据的速度为1Gbps C.前兆以太网的数据读取速度为1Gpbs D.读取D ...
- STL--vector(转载)
函数 表述 c.assign(beg,end) c.assign(n,elem) 将[beg; end)区间中的数据赋值给c. 将n个elem的拷贝赋值给c. c.at(idx) 传回索引idx所指的 ...
- 14种网页jQuery和css3特效插件代码演示
1.网页table增删样式代码 演示和下载地址 2.jQuery左右滑动幻灯片插件 演示和下载地址 3.jQuery文字轮播焦点图 演示和下载地址 4.网页文字焦点图切换 演示和下载地址 5.jQue ...