socket连接超时判断
来源:互联网 发布:c语言强制转换int 编辑:程序博客网 时间:2024/04/28 02:16
select 方式
判断m_server的m_port端口是否可以连上,超时限制为nTimeOut秒
BOOL ConnectTest(char * m_server,int m_port)
{
struct hostent* host = NULL;
struct sockaddr_in saddr;
unsigned int s = 0;
BOOL ret;
time_t start;
int error;
host = gethostbyname (m_server);
if (host==NULL)return FALSE;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(m_port);
saddr.sin_addr = *((struct in_addr*)host->h_addr);
if( (s=socket(AF_INET, SOCK_STREAM, 0))<0){
return FALSE;
}
fcntl(s,F_SETFL, O_NONBLOCK);
if(connect(s,(struct sockaddr*)&saddr, sizeof(saddr)) == -1) {
if (errno == EINPROGRESS){// it is in the connect process
struct timeval tv;
fd_set writefds;
tv.tv_sec = m_nTimeOut;
tv.tv_usec = 0;
FD_ZERO(&writefds);
FD_SET(s, &writefds);
if(select(s+1,NULL,&writefds,NULL,&tv)>0){
int len=sizeof(int);
//下面的一句一定要,主要针对防火墙
getsockopt(s, SOL_SOCKET, SO_ERROR, &error, &len);
if(error==0) ret=TRUE;
else ret=FALSE;
}else ret=FALSE;//timeout or error happen
}else ret=FALSE;
}
else ret=TRUE;
close(s);
return ret;
}
{
struct hostent* host = NULL;
struct sockaddr_in saddr;
unsigned int s = 0;
BOOL ret;
time_t start;
int error;
host = gethostbyname (m_server);
if (host==NULL)return FALSE;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(m_port);
saddr.sin_addr = *((struct in_addr*)host->h_addr);
if( (s=socket(AF_INET, SOCK_STREAM, 0))<0){
return FALSE;
}
fcntl(s,F_SETFL, O_NONBLOCK);
if(connect(s,(struct sockaddr*)&saddr, sizeof(saddr)) == -1) {
if (errno == EINPROGRESS){// it is in the connect process
struct timeval tv;
fd_set writefds;
tv.tv_sec = m_nTimeOut;
tv.tv_usec = 0;
FD_ZERO(&writefds);
FD_SET(s, &writefds);
if(select(s+1,NULL,&writefds,NULL,&tv)>0){
int len=sizeof(int);
//下面的一句一定要,主要针对防火墙
getsockopt(s, SOL_SOCKET, SO_ERROR, &error, &len);
if(error==0) ret=TRUE;
else ret=FALSE;
}else ret=FALSE;//timeout or error happen
}else ret=FALSE;
}
else ret=TRUE;
close(s);
return ret;
}
- socket连接超时判断
- 通过select 和状态EINPROGRESS 实现socket 连接超时判断
- Socket设置连接超时
- socket连接超时问题
- 设置socket超时连接
- Socket连接超时
- 设置socket超时连接
- Socket连接超时
- Socket连接超时
- Socket的读取超时与连接超时
- 捕捉 flash socket 连接超时
- socket connec连接超时处理
- Linux设置socket连接超时
- Socket 设置连接超时时间
- 关于socket长连接超时
- socket connec连接超时处理
- Socket关于设置连接超时
- 关于设置socket超时连接
- 数据库水平分库框架设计
- 信息系统项目管理师资料
- USACO :Healthy Holsteins 解题报告
- struts表单防止重复提交
- PHP邮件收发,和编码问题。数据匹配
- socket连接超时判断
- 转载:序列化学习……
- 为什么我的话总没说服力
- PHP经验分享
- C#中DllImport用法和路径问题
- malloc/free与new/delete的区别
- P2P原理
- SQL中的一些技巧集合
- 高并发控制解决方案乐观并发控制和悲观并发控制总结