Esempio n. 1
0
ConnectionError ConnectionTCPServer::recv( int timeout )
{
    m_recvMutex.lock();

    if( m_cancel || m_socket < 0 || !m_connectionHandler )
    {
        m_recvMutex.unlock();
        return ConnNotConnected;
    }

    if( !dataAvailable( timeout ) )
    {
        m_recvMutex.unlock();
        return ConnNoError;
    }

    struct sockaddr_in they;
    int sin_size = sizeof( struct sockaddr_in );
#ifdef WIN32
    int newfd = accept( m_socket, (struct sockaddr*)&they, &sin_size );
#else
    int newfd = accept( m_socket, (struct sockaddr*)&they, (socklen_t*)&sin_size );
#endif

    m_recvMutex.unlock();

    ConnectionTCPClient* conn = new ConnectionTCPClient( m_logInstance, inet_ntoa( they.sin_addr ),
            ntohs( they.sin_port ) );
    conn->setSocket( newfd );
    m_connectionHandler->handleIncomingConnection( conn );

    return ConnNoError;
}
Esempio n. 2
0
    void Client::handleQuery( const std::string& addr )
    {
      if( m_rRef )
      {
        DNSServiceRefDeallocate( m_rRef );
        m_rRef = 0;
      }

      ConnectionTCPClient* connection = new ConnectionTCPClient( this, logInstance(), addr, m_port );
      // printf( "LinkLocal::Client: connecting to %s:%d\n", addr.c_str(), m_port );
      ConnectionError e = connection->connect();
      if( e != ConnNoError )
      {
        // printf( "connection error: %d\n", e );
        delete connection;
      }
    }
Esempio n. 3
0
  ConnectionError ConnectionTCPServer::recv( int timeout )
  {
    m_recvMutex.lock();

    if( m_cancel || m_socket < 0 || !m_connectionHandler )
    {
      m_recvMutex.unlock();
      return ConnNotConnected;
    }

    if( !dataAvailable( timeout ) )
    {
      m_recvMutex.unlock();
      return ConnNoError;
    }

    struct sockaddr_storage they;
    int addr_size = sizeof( struct sockaddr_storage );
#if defined( _WIN32 ) && !defined( __SYMBIAN32__ )
    int newfd = static_cast<int>( accept( static_cast<SOCKET>( m_socket ), (struct sockaddr*)&they, &addr_size ) );
#else
    int newfd = accept( m_socket, (struct sockaddr*)&they, (socklen_t*)&addr_size );
#endif

    m_recvMutex.unlock();

    char buffer[INET6_ADDRSTRLEN];
    char portstr[NI_MAXSERV];
    int err = getnameinfo( (struct sockaddr*)&they, addr_size, buffer, sizeof( buffer ),
                           portstr, sizeof( portstr ), NI_NUMERICHOST | NI_NUMERICSERV );
    if( !err )
      return ConnIoError;

    ConnectionTCPClient* conn = new ConnectionTCPClient( m_logInstance, buffer,
                                                         atoi( portstr ) );
    conn->setSocket( newfd );
    m_connectionHandler->handleIncomingConnection( this, conn );

    return ConnNoError;
  }