您的位置:首页 > 理论基础 > 计算机网络

阻塞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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: