/* 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(); }