connect timeout
2015-12-04 14:10
405 查看
转自点击打开链接/article/5043977.html
bool ConnectWithTimeout(SOCKET socket, char * host, int port, int timeout)
{
TIMEVAL timeval = {0};
timeval.tv_sec = timeout;
timeval.tv_usec = 0;
struct sockaddr_in address;
address.sin_family = AF_INET;
address.sin_port = htons(port);
address.sin_addr.s_addr = inet_addr(host);
if(address.sin_addr.s_addr == INADDR_NONE)
return false;
// set the socket in non-blocking
unsigned long mode = 1;
int result = ioctlsocket(socket, FIONBIO, &mode);
if (result != NO_ERROR)
printf("ioctlsocket failed with error: %ld\n", result);
connect(socket, (struct sockaddr *)&address, sizeof(address));
// restart the socket mode
mode = 0;
result = ioctlsocket(socket, FIONBIO, &mode);
if (result != NO_ERROR)
printf("ioctlsocket failed with error: %ld\n", result);
fd_set Write, Err;
FD_ZERO(&Write);
FD_ZERO(&Err);
FD_SET(socket, &Write);
FD_SET(socket, &Err);
// check if the socket is ready
select(0, NULL, &Write, &Err, &timeval);
if(FD_ISSET(socket, &Write))
return true;
return false;
}
bool ConnectWithTimeout(SOCKET socket, char * host, int port, int timeout)
{
TIMEVAL timeval = {0};
timeval.tv_sec = timeout;
timeval.tv_usec = 0;
struct sockaddr_in address;
address.sin_family = AF_INET;
address.sin_port = htons(port);
address.sin_addr.s_addr = inet_addr(host);
if(address.sin_addr.s_addr == INADDR_NONE)
return false;
// set the socket in non-blocking
unsigned long mode = 1;
int result = ioctlsocket(socket, FIONBIO, &mode);
if (result != NO_ERROR)
printf("ioctlsocket failed with error: %ld\n", result);
connect(socket, (struct sockaddr *)&address, sizeof(address));
// restart the socket mode
mode = 0;
result = ioctlsocket(socket, FIONBIO, &mode);
if (result != NO_ERROR)
printf("ioctlsocket failed with error: %ld\n", result);
fd_set Write, Err;
FD_ZERO(&Write);
FD_ZERO(&Err);
FD_SET(socket, &Write);
FD_SET(socket, &Err);
// check if the socket is ready
select(0, NULL, &Write, &Err, &timeval);
if(FD_ISSET(socket, &Write))
return true;
return false;
}
相关文章推荐
- android典型代码系列(十二)------删除某个文件夹里面的所有内容(递归)
- android studio 导入项目Gradle版本不一致问题解决方法【android studio】
- PL/SQL调试存储过程
- iOS中获取当前时间
- postgresql 服务器端编程之hello word
- hdu 5586 Sum【dp最大子段和】
- SQL(MSSQLSERVER)服务启动错误代码3414
- Web Services 指南之:Web Services 的架构
- Fatal error encountered during command execution
- 016Handler的使用
- Web Services 指南之:Web Services 的架构
- Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
- android典型代码系列(十一)------判断某个应用程序是 不是三方的应用程序
- Android 用Intent调用系统中经常被用到的组件
- Linux dpkg 命令
- 编程基础知识之匿名变量
- Hibernate学习笔记一
- SQL中常用函数集合
- flog
- android典型代码系列(十)------获取一个应用程序的权限信息(反射)