示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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;	
}
示例#5
0
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;	
}