BOOL CTcpClient::CreateClientSocket(LPCTSTR lpszRemoteAddress, HP_SOCKADDR& addrRemote, USHORT usPort, LPCTSTR lpszBindAddress, HP_SOCKADDR& addrBind) { if(!::GetSockAddrByHostName(lpszRemoteAddress, usPort, addrRemote)) return FALSE; if(!::IsStrEmpty(lpszBindAddress)) { if(!::sockaddr_A_2_IN(lpszBindAddress, 0, addrBind)) return FALSE; if(addrRemote.family != addrBind.family) { ::WSASetLastError(ERROR_AFNOSUPPORT); return FALSE; } } m_soClient = socket(addrRemote.family, SOCK_STREAM, IPPROTO_TCP); if(m_soClient == INVALID_SOCKET) return FALSE; BOOL bOnOff = (m_dwKeepAliveTime > 0 && m_dwKeepAliveInterval > 0); VERIFY(::SSO_KeepAliveVals(m_soClient, bOnOff, m_dwKeepAliveTime, m_dwKeepAliveInterval) == NO_ERROR); VERIFY(::SSO_ReuseAddress(m_soClient, TRUE) == NO_ERROR); SetRemoteHost(lpszRemoteAddress, usPort); return TRUE; }
BOOL CUdpCast::ConnectToGroup(LPCTSTR lpszRemoteAddress, USHORT usPort, in_addr sinAddr) { if(m_enCastMode == CM_MULTICAST) { TCHAR szAddress[40]; int iAddressLen = sizeof(szAddress) / sizeof(TCHAR); if(!::GetIPAddress(lpszRemoteAddress, szAddress, iAddressLen)) { ::WSASetLastError(WSAEADDRNOTAVAIL); return FALSE; } if(!::sockaddr_A_2_IN(AF_INET, szAddress, usPort, m_castAddr)) { ::WSASetLastError(WSAEADDRNOTAVAIL); return FALSE; } VERIFY(::SSO_SetSocketOption(m_soClient, IPPROTO_IP, IP_MULTICAST_TTL, &m_iMCTtl, sizeof(int)) != SOCKET_ERROR); VERIFY(::SSO_SetSocketOption(m_soClient, IPPROTO_IP, IP_MULTICAST_LOOP, &m_bMCLoop, sizeof(BOOL)) != SOCKET_ERROR); } else { m_castAddr.sin_family = AF_INET; m_castAddr.sin_addr.s_addr = INADDR_BROADCAST; m_castAddr.sin_port = htons(usPort); BOOL bSet = TRUE; VERIFY(::SSO_SetSocketOption(m_soClient, SOL_SOCKET, SO_BROADCAST, &bSet, sizeof(BOOL)) != SOCKET_ERROR); } if(m_enCastMode == CM_MULTICAST) { ip_mreq mcast; ::ZeroMemory(&mcast, sizeof(ip_mreq)); mcast.imr_multiaddr = m_castAddr.sin_addr; mcast.imr_interface = sinAddr; if(::SSO_SetSocketOption(m_soClient, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mcast, sizeof(ip_mreq)) == SOCKET_ERROR) return FALSE; } SetRemoteHost(lpszRemoteAddress, usPort); BOOL isOK = FALSE; if(::WSAEventSelect(m_soClient, m_evSocket, FD_READ | FD_WRITE | FD_CLOSE) != SOCKET_ERROR) { if(FireConnect() != HR_ERROR) { m_enState = SS_STARTED; isOK = TRUE; } } return isOK; }
BOOL CUdpCast::CreateClientSocket(LPCTSTR lpszRemoteAddress, USHORT usPort, LPCTSTR lpszBindAddress, HP_SOCKADDR& bindAddr) { if(m_enCastMode == CM_MULTICAST) { if(!::GetSockAddrByHostName(lpszRemoteAddress, usPort, m_castAddr)) return FALSE; } else { m_castAddr.family = AF_INET; m_castAddr.addr4.sin_addr.s_addr = INADDR_BROADCAST; m_castAddr.SetPort(usPort); } if(!lpszBindAddress || lpszBindAddress[0] == 0) { bindAddr.family = m_castAddr.family; bindAddr.SetPort(usPort); } else { if(!::sockaddr_A_2_IN(lpszBindAddress, usPort, bindAddr)) return FALSE; if(m_enCastMode == CM_BROADCAST && bindAddr.IsIPv6()) { ::WSASetLastError(WSAEPROTONOSUPPORT); return FALSE; } if(m_castAddr.family != bindAddr.family) { ::WSASetLastError(WSAEAFNOSUPPORT); return FALSE; } } m_soClient = socket(m_castAddr.family, SOCK_DGRAM, IPPROTO_UDP); if(m_soClient == INVALID_SOCKET) return FALSE; VERIFY(::SSO_UDP_ConnReset(m_soClient, FALSE) == NO_ERROR); VERIFY(::SSO_ReuseAddress(m_soClient, m_bReuseAddress) != SOCKET_ERROR); m_evSocket = ::WSACreateEvent(); ASSERT(m_evSocket != WSA_INVALID_EVENT); SetRemoteHost(lpszRemoteAddress, usPort); return TRUE; }
BOOL SVUnixOpMonitor::init( char * RemoteHost,int Port, char * User, char * Pwd, char * UserPrompt, char * PwdPrompt, char * LoginPrompt) { if(!init()) return FALSE; SetUser(User); SetUserPrompt(UserPrompt); SetPwd(Pwd); SetPwdPrompt(PwdPrompt); SetRemoteHost(RemoteHost); SetPort(Port); SetLoginPrompt(LoginPrompt); return TRUE; }
bool SVUnixOpMonitor::init( string RemoteHost,int Port, string User, string Pwd, string UserPrompt, string PwdPrompt, string LoginPrompt) { if(!init()) return FALSE; SetUser(User.c_str()); SetUserPrompt(UserPrompt.c_str()); SetPwd(Pwd.c_str()); SetPwdPrompt(PwdPrompt.c_str()); SetRemoteHost(RemoteHost.c_str()); SetPort(Port); SetLoginPrompt(LoginPrompt.c_str()); return true; }