Exemplo n.º 1
0
bool PeerConnector::ConnectTCP(const PEER_ADDRESS& addr, UINT16 realPort, const PeerConnectParam& param)
{
	if (m_LiveInfo.TransferMethod == TRANSFER_UDP)
	{
		return ConnectUDP(addr, param); // 用于测试纯tcp的情况
	}

	if (realPort == 0)
		realPort = addr.TcpPort;

	if ( realPort == 0 )
		return false;

	if (CheckConnected(addr, param.IsVIP))
	{
		VIEW_INFO("CPeerManager::ConnectToRemote CheckConnected " << addr << " failed");
		return false;
	}
	const PEER_ADDRESS& localAddr = m_NetInfo->Address;
	if (addr.IP == localAddr.IP && addr.TcpPort == localAddr.TcpPort)
	{
		//LIVE_ASSERT(false);
		VIEW_ERROR("ConnectTCP ignore myself " << addr);
		return false;
	}

	return m_TCPConnector->Connect(addr, realPort, param);
}
Exemplo n.º 2
0
//------------------------------------------------------------------------------
//
// Open() - Create a connection to a specified address on a specified port
//
//------------------------------------------------------------------------------
bool CActiveSocket::Open(const char *pAddr, uint16 nPort)
{
    bool bRetVal = false;

    if (IsSocketValid() == false)
    {
        SetSocketError(CSimpleSocket::SocketInvalidSocket);
        return bRetVal;
    }

    if (pAddr == NULL)
    {
        SetSocketError(CSimpleSocket::SocketInvalidAddress);
        return bRetVal;
    }

    if (nPort == 0)
    {
        SetSocketError(CSimpleSocket::SocketInvalidPort);
        return bRetVal;
    }

    switch (m_nSocketType)
    {
    case CSimpleSocket::SocketTypeTcp :
    {
        bRetVal = ConnectTCP(pAddr, nPort);
        break;
    }
    case CSimpleSocket::SocketTypeUdp :
    {
        bRetVal = ConnectUDP(pAddr, nPort);
        break;
    }
    case CSimpleSocket::SocketTypeRaw :
        break;
    default:
        break;
    }

    //--------------------------------------------------------------------------
    // If successful then create a local copy of the address and port
    //--------------------------------------------------------------------------
    if (bRetVal)
    {
        socklen_t nSockLen = sizeof(struct sockaddr);

        memset(&m_stServerSockaddr, 0, nSockLen);
        getpeername(m_socket, (struct sockaddr *)&m_stServerSockaddr, &nSockLen);

        nSockLen = sizeof(struct sockaddr);
        memset(&m_stClientSockaddr, 0, nSockLen);
        getsockname(m_socket, (struct sockaddr *)&m_stClientSockaddr, &nSockLen);

        SetSocketError(SocketSuccess);
    }

    return bRetVal;
}
Exemplo n.º 3
0
static int OpenSender( void )
{
	l.pcCommand = ConnectUDP( NULL, 3007, WIDE("255.255.255.255"), 3006, NULL, NULL );
	if( !l.pcCommand )
		l.pcCommand = ConnectUDP( NULL, 3008, WIDE("255.255.255.255"), 3006, NULL, NULL );
	if( !l.pcCommand )
		l.pcCommand = ConnectUDP( NULL, 3009, WIDE("255.255.255.255"), 3006, NULL, NULL );
	if( !l.pcCommand )
		l.pcCommand = ConnectUDP( NULL, 3010, WIDE("255.255.255.255"), 3006, NULL, NULL );
	if( !l.pcCommand )
		l.pcCommand = ConnectUDP( NULL, 3011, WIDE("255.255.255.255"), 3006, NULL, NULL );
	if( !l.pcCommand )
		l.pcCommand = ConnectUDP( NULL, 3012, WIDE("255.255.255.255"), 3006, NULL, NULL );
	if( !l.pcCommand )
	{
		srand( GetTickCount() );
		l.pcCommand = ConnectUDP( NULL, (uint16_t)(3000 + rand() % 10000), WIDE("255.255.255.255"), 3006, NULL, NULL );
	}


	if( !l.pcCommand )
	{
		printf( WIDE("Failed to bind to any port!\n") );
		return 0;
	}
	return 1;
}
Exemplo n.º 4
0
bool PeerConnector::Connect(const PEER_ADDRESS& addr, const PeerConnectParam& param)
{
	if (param.ConnectFlags == IPPOOL_CONNECT_NORMAL)
	{
		return ConnectTCP(addr, 0, param);
	}
	else if (param.ConnectFlags == IPPOOL_CONNECT_80)
	{
		return ConnectTCP(addr, 80, param);	
	}
	else if (param.ConnectFlags == IPPOOL_CONNECT_UDPT)
	{
		return ConnectUDP(addr, param);
	}
	else
	{	// 如果默认的话,就直接转向 IPPOOL_CONNECT_
		LIVE_ASSERT(param.ConnectFlags == IPPOOL_CONNECT_NONE);
		return ConnectUDP(addr, param);
	}
}