네트워크 연결이 없을 때 내 네트워크 응용 프로그램을 로컬로 (서버와 클라이언트가 동일한 컴퓨터에서 실행되도록) 작동하려고합니다. 입니다 제가 현재 사용하고Asio의 호스트 이름 분석이 Linux에서 어떻게 작동합니까? NSS를 사용할 수 있습니까?
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
what(): Host not found (authoritative)
Aborted
코드 :
tcp::resolver::query query(host, PORT);
tcp::resolver::iterator endpointIterator = resolver.resolve(query);
tcp::resolver::iterator end;
boost::system::error_code error = boost::asio::error::host_not_found;
while(error && endpointIterator != end)
{
mySocket.close();
mySocket.connect(*endpointIterator++, error);
}
if(error)
throw boost::system::system_error(error);
나는했습니다 확신이 때때로 "그냥 작동"을 보이지만, 대부분의 시간은 내가 끝낼 문제를 ip::basic_resolver::resolve으로 줄이십시오. 그러나 Linux에서 구현 된 방법이나 내가 사용하고자하는 것이 무엇인지 파악할 수 없습니다. This 같은 문제가있는 것 같습니다. 전혀 어떤 조회를 수행하고 그냥 작동한다 127.0.0.1을 사용하지만
tcp::resolver::query query(host, PORT, boost::asio::ip::resolver_query_base::address_configured | boost::asio::ip::resolver_query_base::numeric_host
에 query 라인을 교체하려 할 때이 '일을 일부러 그냥 것으로 보인다.
필자가 실수로이 주소를 찾은 경우이라는 address_configured 플래그 (기본적으로 설정 됨)가 루프백 장치가 주소가있는 유일한 주소 인 경우 복귀하지 못하도록합니다. 다른 사람들에게 도움이되기를 바라는 마음으로이 질문을 게시하고 있지만 문제는 해결했습니다. 다른 사람들이 나는 그들이 서비스 이름을 조회 할 경우 사용하고 플래그를 (난 그냥 포트 번호를 사용하고) 싶지 않을 수도 있지만
는 지금은
tcp::resolver::query query(host, PORT, boost::asio::ip::resolver_query_base::numeric_service);
를 사용합니다.