Environment: VC6, WindosNT4 SP3
ÀÌ Å¬·¡½º´Â MFCÀÇ CSocket class¸¦ ÀÌ¿ëÇÏ´Â °æ¿ì¿¡ ŸÀӾƿôüũ°¡ ºÒ°¡´ÉÇÑ ¹®Á¦¸¦ ÇØ°áÇØ Áִ Ŭ·¡½º ÀÌ´Ù. CSocketÀº ¼ÒÄÏ¿¬°á½Ã ¹®Á¦°¡ ¹ß»ýÇÏ¸é ¿øÇÏ´Â ½Ã°£¿¡ ¸®ÅÏÇØ ÁÖÁö ¸øÇϹǷΠÇÁ·Î±×·¥ÀÇ È¿À²À» ¶³¾î ¶ß¸°´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ CSock¸¦ »ç¿ëÇϸé Á¤È®ÇÏ°Ô ¿øÇÏ´Â ½Ã°£µ¿¾È¿¡ ¿¬°áÀÌ µÇÁö ¸øÇÏ¸é ¹Ù·Î ¸®ÅÏÇÏ¿© ÁֹǷΠÇÁ·Î±×·¥ÀÇ Á¤È®¼ºÀ» ³ôÀÏ ¼ö ÀÖ´Ù. CSock´Â MFC CSocket class¿¡¼ ConnectHelper¸¦ ¿À¹ö¶óÀ̵ùÇØ¼ ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ¿´´Ù.
/// CSocket modify - timeout module. BOOL CSock::ConnectHelper(const SOCKADDR* lpSockAddr, int nSockAddrLen) { if (m_pbBlocking != NULL) { WSASetLastError(WSAEINPROGRESS); return FALSE; } m_nConnectError = -1; if (!CAsyncSocket::ConnectHelper(lpSockAddr, nSockAddrLen)) { if (GetLastError() == WSAEWOULDBLOCK) { // Insert.... CTime curt, st; CTimeSpan span(0, 0, 0, m_nTimeOut); st = CTime().GetCurrentTime(); //....... while (PumpMessages(FD_CONNECT)) { if (m_nConnectError != -1) { WSASetLastError(m_nConnectError); return (m_nConnectError == 0); } // Insert.... curt = CTime().GetCurrentTime(); if(curt > (st+span)) return FALSE; //.............. } } return FALSE; } m_Kill = FALSE; return TRUE; }
Download demo & source project - 36 Kb
Date Posted: April February 26, 1999