sock的connect()的超时问题??????????? 很快返回错误信息是不可能的。这就好比你去找一个人,如果他的同事告诉你他请假了,那么你就可以回去了,但是如果一个人都没有,你就不得不四处寻找了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这问题有没有解决的方法呀,不会这么难吧?》 请高手继续回答呀,我等着用呢,可以再加分得!!!!!!! 请高手继续回答呀,我等着用呢,可以再加分得!!!!!!! 请高手继续回答呀,我等着用呢,可以再加分得!!!!!!! 请高手继续回答呀,我等着用呢,可以再加分得!!!!!!! 请高手继续回答呀,我等着用呢,可以再加分得!!!!!!! 请高手继续回答呀,我等着用呢,可以再加分得!!!!!!! 请高手继续回答呀,我等着用呢,可以再加分得!!!!!!! 使用计时器,自己判断!!!! If you use MFC, the following codes can help you(from codeguru):// .h#include "stdafx.h"//////////////////////////////////////////////////////////////////////////////////// //// Implementation of the CSock class //// ////////////////////////////////////////////////////////////////////////////////////// //// 1999 Presented by Seung Kyung, Lee. //// E-Mail : [email protected] //// //// Designed using Microsoft VisualC++ 6.0 and MFC //// Tested on WindowsNT 4.0 Server //// ////////////////////////////////////////////////////////////////////////////////////class CSock : public CSocket{ virtual BOOL ConnectHelper(const SOCKADDR* lpSockAddr, int nSockAddrLen); virtual void OnClose( int nErrorCode );public: CSock(); BOOL m_Kill;};// .cpp#include "stdafx.h"#include "Sock.h"/// CSocket modify - timeout module.CSock::CSock(){ m_Kill = TRUE; m_nTimeOut = 1; struct linger Ling; Ling.l_onoff = 1; Ling.l_linger = 2; SetSockOpt(SO_LINGER, &Ling, sizeof(Ling));}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;}void CSock::OnClose(int nErrorCode){ m_Kill = TRUE;}If you use SDK, you can track this code in MFC source code.Wish this can help you. vc代码不联想了 MFC有哪些方法可以去关掉其它进程? C++中extern “C”含义深层探索 拿到一个程序的源代码,大家一般是怎么样跟踪代码的执行的? 一个有关cpu使用的问题 ASSERT 用法请教? 设置程序自动运行的方法有多少方法,请提出你的方法,我知道有5种,你呢? 新手上路:请问谁用过CTreeCtrl::SortChildrenCB,能帮我讲讲或者有代码吗? 关于权限问题 请教大加帮个忙!在线等! 谢谢 C运行时函数,到底是什么? 怎么做对语法敏感的编辑框(NULL) 我想交几位学VC的朋友,共同学习
// .h
#include "stdafx.h"//////////////////////////////////////////////////////////////////////////////////
// //
// Implementation of the CSock class //
// //
//////////////////////////////////////////////////////////////////////////////////
// //
// 1999 Presented by Seung Kyung, Lee. //
// E-Mail : [email protected] //
// //
// Designed using Microsoft VisualC++ 6.0 and MFC //
// Tested on WindowsNT 4.0 Server //
// //
//////////////////////////////////////////////////////////////////////////////////class CSock : public CSocket
{
virtual BOOL ConnectHelper(const SOCKADDR* lpSockAddr, int nSockAddrLen);
virtual void OnClose( int nErrorCode );
public:
CSock();
BOOL m_Kill;
};
// .cpp
#include "stdafx.h"
#include "Sock.h"/// CSocket modify - timeout module.
CSock::CSock()
{
m_Kill = TRUE;
m_nTimeOut = 1;
struct linger Ling;
Ling.l_onoff = 1;
Ling.l_linger = 2;
SetSockOpt(SO_LINGER, &Ling, sizeof(Ling));
}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;
}void CSock::OnClose(int nErrorCode)
{
m_Kill = TRUE;
}
If you use SDK, you can track this code in MFC source code.Wish this can help you.