Exemplo n.º 1
0
CSocket::CSocket( const CSocket& src )
  {
  if ( !src.isValid() )
    {
    throw CSocketException( "Source Socket is invalid, so new socket can't be better" );
    }

  socklen_t addr_length = m_otAddr.SizeGet();
  m_nSocket      = ::accept( src.m_nSocket,
                             src.m_otAddr,
                             &addr_length );
  if ( m_nSocket <= 0 )
    {
    throw CSocketException( "Could not 'accept', new socket is invalid" );
    }

  timeval timeout;
  timeout.tv_sec  = 0;
  timeout.tv_usec = 1000; // looks like this value is ignored
  int nResult = ::setsockopt( m_nSocket,
                              SOL_SOCKET,
                              SO_RCVTIMEO,
                              (const char*)&timeout,
                              sizeof(timeout) );
  if ( nResult == -1 )
    {
    throw CSocketException( "Could not set SO_RCVTIMEO, new socket is invalid" );
    } // if ( result == -1 )

  } // CSocket::CSocket( const CSocket& src )