ホスト/サービスを解決できるかどうかを示すboost::system::error_code
を返信します。ホスト/サービスの検索に失敗した理由は複数あります(ネットワーク接続の問題や無効な引数など)。`boost :: asi :: ip :: tcp :: resolver :: resolve()`が失敗したときに、 `boost :: system :: error_code`の値を指定する必要がありますか?
何を返す必要がありますか?
ホスト/サービスを解決できるかどうかを示すboost::system::error_code
を返信します。ホスト/サービスの検索に失敗した理由は複数あります(ネットワーク接続の問題や無効な引数など)。`boost :: asi :: 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
オブジェクトを作成するには、エラーコードとカテゴリを提示する必要があります。
error_code ec (errc::connection_refused, system_category());
return ec;
システムカテゴリを使用しているときに、エラーコードとしてerrno
値を渡すことができる:ここでそのエラーが接続を拒否別のホストによるものであると仮定すると、一例です。たとえば:
#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は既にそれを持っています。ここでは簡単な例です:システム障害を記述する例外をスローするsystem_error
をスローし、使用する必要がない場合
#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
オブジェクトを渡します。 error_code
を例外なく使用するもう1つの理由は、異なるスレッド間でエラーを通知する必要がある場合です。しかし、C++ 11はa solution for propagating exceptions across threadsです。
希望すると助かります!