Exemple #1
0
/* the warn server connect routine */
static int _WSConnect()
{
	struct sigaction act, oact;
	sigset_t set, oset;
	
	if(!cConnectFlag&&iSocketType == CON_TCP)
	{	
		act.sa_handler = _SigalrmHandler;
		sigemptyset(&act.sa_mask);
		act.sa_flags = 0;
		if(sigaction(SIGALRM, &act, &oact) < 0) return -1;
		
		sigemptyset(&set);
		sigaddset(&set, SIGALRM);
		sigprocmask(SIG_UNBLOCK, &set, &oset);

		alarm(iConTimeOut);
		if(connect(iSocket, (struct sockaddr *)psAddr, iAddrSize) < 0) 
		{
			alarm(0);
			if(errno == EINTR) 
			{
				return -3;
			}
			else
			{
				if(_InitSocket()) return -4;
				alarm(iConTimeOut);
				if(connect(iSocket, (struct sockaddr *)psAddr, iAddrSize) < 0)
				{
					alarm(0);
					if(errno == EINTR) return -3;
					else
					{
						if(_InitSocket()) return -4;
						return -2;
					}
				}
			}	
				
		}
		
		sigaction(SIGALRM, &oact, NULL);
		sigprocmask(SIG_SETMASK, &oset, NULL);
	}
	
	cConnectFlag = 1;
	
	return 0;
}
/**
 *  重连接口
 *
 *  @return
 */
int32_t CTCPClientAsync::ReConnectAsync()
{
    int32_t nErrorCode = 0;
    if (S_INVALID_SOCKET == GetSocket())
    {
        _InitSocket();
        nErrorCode = ConnectAsync(GetRemoteIP(), GetRemotePort());
    }
    return nErrorCode;
}
int32_t CSSLClientAsync::ReConnectAsync()
{
    int32_t nErrorCode = 0;
    if (S_INVALID_SOCKET == GetSocket())
    {
        _InitSocket();
        InitSSL(GetCertFile().c_str(), GetKeyFile().c_str(), GetKeyPassword().c_str());
        nErrorCode = ConnectAsync(GetRemoteIP(), GetRemotePort());
    }
    return nErrorCode;
}
CTCPClientAsync::CTCPClientAsync(CIOLoop* pIO) : CBaseIOStream(pIO)
{
    _InitSocket();
}