호스트/서비스를 확인할 수 있는지 여부를 나타내는 boost::system::error_code
을 반환하고 싶습니다. 호스트/서비스 조회가 실패한 이유는 여러 가지가 있습니다 (예 : 네트워크 연결 문제 또는 잘못된 인수).boost :: asio :: ip :: tcp :: resolver :: resolve()가 실패 할 때 어떤 boost :: system :: error_code 값을 제공해야합니까?
반환해야 할 항목은 무엇입니까?
호스트/서비스를 확인할 수 있는지 여부를 나타내는 boost::system::error_code
을 반환하고 싶습니다. 호스트/서비스 조회가 실패한 이유는 여러 가지가 있습니다 (예 : 네트워크 연결 문제 또는 잘못된 인수).boost :: asio :: ip :: tcp :: resolver :: resolve()가 실패 할 때 어떤 boost :: system :: error_code 값을 제공해야합니까?
반환해야 할 항목은 무엇입니까?
외부에서이 권리를 취득하는 것은 불가능합니다. resolve()
. 하지만 당신은 아웃 - 매개 변수로 error_code&
걸리는 오버로드 중 하나를 사용하여, 당신을 위해 그것을 얻을 수 있습니다
iterator resolve(const query & q, boost::system::error_code & ec)
iterator resolve(const endpoint_type & e, boost::system::error_code & ec)
을하고 다음을 ERROR_CODE을 반환 세트. 나는 이것이 errno
또는 h_errno
을 적절히 감쌀 것이라고 믿는다.
error_code
개체를 만들려면 오류 코드와 범주를 찾아야합니다. 다음 예는, 그 오차를 가정 인해 다른 호스트 접속 거부하는 것이다 시스템 종류를 사용하는 경우에도 에러 코드로 errno
값을 전달할 수
error_code ec (errc::connection_refused, system_category());
return ec;
. 예를 들면 :
#include <fstream>
#include <cerrno>
#include <boost/system/system_error.hpp>
void foo()
{
ifstream file ("test.txt");
if (!file.is_open())
{
int err_code = errno;
boost::system::error_code ec (err_code
, boost::system::system_category());
throw boost::system::system_error (ec, "cannot open file");
}
}
불행하게도,이 라이브러리가 제대로 documented, 그래서 일을 알아 내기 위해 header files로보고 당신을 추천 할 수 있습니다. 이 코드는 매우 간단하고 곧장 앞으로 나옵니다.
컴파일러가 C++ 11을 지원하고이 기능을 기꺼이 사용하려는 경우이 기능을 사용하여 표준으로 만들 수 있습니다. 제가 아는 한 gcc 4.6.1은 이미 있습니다. 다음은 간단한 예는 다음
#include <cerrno>
#include <system_error>
std::error_code
SystemError::getLastError()
{
int err_code = errno;
return std::error_code (err_code, std::system_category());
}
void foo()
{
throw std::system_error (getLastError(), "something went wrong");
}
일반적으로, 라이브러리는 약
error_code
객체를 전달 던져 시스템 오류를 나타내는 예외를 발생하는
system_error
을 사용할 필요가없는 경우.
error_code
을 예외없이 사용하는 또 다른 이유는 다른 스레드에서 오류를 알릴 필요가있을 때입니다. 그러나 C++ 11은
a solution for propagating exceptions across threads입니다.
희망이 있습니다.