CAsyncSocket m_Socket;
int port = _ttoi(g_UserInfo.ServerPort);
m_Socket.Create(0,SOCK_STREAM,0);
fd_set fdset;
FD_ZERO( &fdset );
FD_SET( m_Socket.m_hSocket, &fdset );
timeval timeOut;
timeOut.tv_sec = 3;
timeOut.tv_usec = 0;
// connect를 호출하긴 하지만 CAsync인 관계로 블럭되지 않고 통과
int ret = m_Socket.Connect(g_UserInfo.ServerIP,port);
if(ret == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK)
return FALSE;
// 여기서 3초간 블럭
if(select(0, NULL, &fdset, NULL, &timeOut) == SOCKET_ERROR)
return FALSE;
// 3초 후에 블럭이 플렸다면 현재 소켓이 열려 있는지 확인
if ( !FD_ISSET( m_Socket.m_hSocket, &fdset ) )
{
/// 3초만에 안열린 것이고
closesocket(m_Socket.m_hSocket);
m_Socket.m_hSocket = INVALID_SOCKET;
CString strMessage;strMessage.LoadString(IDS_CONNECTFAIL);
AfxMessageBox(strMessage);
return FALSE;
}
댓글 없음:
댓글 쓰기