async_resolve 핸들러에서 "서비스를 찾을 수 없음"오류 받기

StackOverflow https://stackoverflow.com/questions/1400787

  •  05-07-2019
  •  | 
  •  

문제

다음과 같은 것처럼 보이는 코드가 있습니다.

//unrelated code snipped
resolver.reset(new tcp::resolver(iosvc));
tcp::resolver::query query(host, port);
resolver->async_resolve(query,
    boost::bind(&TCPTransport::handle_resolve, this,
      boost::asio::placeholders::error,
      boost::asio::placeholders::iterator));

LOG4CXX_INFO(logger, "Attempting connection to at " << host << ":" << port);
//unrelated code snipped



void TCPTransport::handle_resolve(const boost::system::error_code& err,
  tcp::resolver::iterator endpoint_iterator)
{
  if (err)
  {
    LOG4CXX_ERROR(logger, "Error: " << err.message());
  }
  else
  {
    tcp::endpoint endpoint = *endpoint_iterator;
    if (!socket)
    {
      socket.reset(new tcp::socket(iosvc));
    }
    socket->async_connect(endpoint,
      boost::bind(&TCPTransport::handle_connect, this,
        boost::asio::placeholders::error, ++endpoint_iterator));
  }
}

이 코드를 실행하면 서버의 적절한 게이트와 포트를 사용하여 실행 중이며 로그 파일에서 다음 텍스트를 얻습니다. 오류 : 서비스를 찾을 수 없습니다.

이 오류가 실제로 무엇을 의미하는지에 대한 통찰력을 제공 할 수 있습니까?

도움이 되었습니까?

해결책

부스트에서는 그 오류가 getAddrinfo ()를 호출 한 결과로만 발생할 수있는 것처럼 보입니다. MSDN에서 (가치가있는 것), 서비스 이름 (또는 포트)이 발신자 (ASIO)가 지원하는 소켓 유형에 대해 지원되지 않는 것처럼 들립니다.

다시 말해, 그것은 보인다 비 TCP 소켓 (DNS 해상도에 TCP 클래스를 사용하기 때문에) 또는 비 TCP 포트 (그에 대해 어떻게 해야할지 확실하지 않음)에서 TCP 연결을 시도하는 것처럼.

Debugger를 사용하여 코드를 밟아서 무엇이 잘못되고 있는지 확인하는 것이 좋습니다. 그러나 Resolve ()를 동기 호출을 사용하면 훨씬 쉽습니다. 그렇지 않으면 ASIO가 사용하는 다양한 내부 처리기에 여러 브레이크 포인트를 설정해야합니다 (그렇게 나쁘지는 않지만 여전히 성가신). 도움이되기를 바랍니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top