5

socket_t::send 関数の例は、メッセージが正常に送信されたかどうかを示す bool を返しますが、この戻り値をチェックするサンプル コードは見たことがありません。

0MQ C++ APIによると、C エラーは例外に変換されます。

基礎となる ØMQ C ライブラリ関数によって報告されるすべてのエラーは、C++ 言語バインディングによって自動的に例外に変換されます。zmq::error_t クラスは std::exception クラスから派生し、 zmq_strerror() 関数を使用してエラー コードを人間が読める文字列に変換します。

sendの戻り値を確認する必要はありますか?send 関数が false を返すが、例外をスローしない場合はありますか?

4

1 に答える 1

3

ソースコードから:

inline bool send (message_t &msg_, int flags_ = 0)
{
    int rc = zmq_send (ptr, &msg_, flags_);
    if (rc == 0)
        return true;
    if (rc == -1 && zmq_errno () == EAGAIN)
        return false;
    throw error_t ();
}

答えはそこにあります。zmq_sendがエラーを EAGAIN に設定すると、send は false を返します。それがいつ起こるかを理解するには、zmq_socket と zmq_setsockopt のドキュメントを読んでください。

使用しているソケットが EAGAIN を発生させる可能性があり、この状態を処理したい場合は、戻り値を確認する必要があります。たとえば、メッセージをキューに入れ、後で再試行することで処理できます。

于 2012-10-15T18:38:22.317 に答える