阻塞TCP套接字connect超时设置
2016-05-10 15:47
381 查看
大致就是先设置非阻塞的,然后connent,然后再用select模型中的select函数控制。
//设置非阻塞方式连接
unsigned long ul = 1;
int ret;
ret = ioctlsocket(m_sock, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)
return FALSE;
::connect(m_sock,(sockaddr *)&m_ServerAddr,sizeof(sockaddr_in));
//select 模型,即设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(m_sock, &r);
timeout.tv_sec = 2; //连接超时2秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if(ret<=0)
{
::closesocket(m_sock);
return false;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(m_sock, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR)
{
::closesocket(m_sock);
return false;
}
return true;
//设置非阻塞方式连接
unsigned long ul = 1;
int ret;
ret = ioctlsocket(m_sock, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)
return FALSE;
::connect(m_sock,(sockaddr *)&m_ServerAddr,sizeof(sockaddr_in));
//select 模型,即设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(m_sock, &r);
timeout.tv_sec = 2; //连接超时2秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if(ret<=0)
{
::closesocket(m_sock);
return false;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(m_sock, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR)
{
::closesocket(m_sock);
return false;
}
return true;
相关文章推荐
- socket的概念与网络通信要素
- linux下创建tuntap网络设备
- 使用HttpOnly提升Cookie安全性
- Java网络编程---InetAddress类
- Android网络编程(1)
- okhttp设置超时时间
- Android笔记 httpurlconnection
- http 状态码
- 网络安全
- myeclipse中 报出The type javax.servlet.http.HttpServlet cannot be resolved. It is indirect错误
- TCP/IP详解学习笔记(14)-TCP连接的未来和性能(未写完)
- HTTP协议
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
- TCP/IP详解学习笔记(12)-TCP的超时与重传
- TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流
- TCP/IP详解学习笔记(10)-TCP连接的建立与中止
- TCP/IP详解学习笔记(9)-TCP协议概述
- TCP/IP详解(三)---IP、ARP协议
- TCP/IP详解学习笔记(8)-DNS域名系统
- TCP/IP详解学习笔记(7)-广播和多播,IGMP协议