AMQP ハンドシェイクを開始するときの TCP RST 入力

AMQP ハンドシェイクを開始するときの TCP RST 入力

私は LAN でクライアントとして動作するデバイスの OpenWRT (ar71xx) で rabbitmq-c v0.8.0 を実行しています。同じシステムでも、ルーターによって動作が異なるようです。

私が見ている問題は次のとおりです (これは私のコードの一部です):

_socket  = amqp_tcp_socket_new( _connection );

if( _socket == NULL )
{
    log_error( "connect(): can't create a new socket");
    return false;
}

status = amqp_socket_open_noblock( _socket, _host.c_str(), _port, &_openTimeOut);

if( status  !=  AMQP_STATUS_OK  )
{
    log_error( "connect(): can't open socket: %d", status);
    return false;
}

そして、ここでは、何によって返されるかはわかりませんが、-13 または -9 のエラーが返されます。rabbitmq-c コードを詳しく調べたところ、これらの 2 つの戻りコードは主に poll() または connect() 呼び出しに依存していることがわかりましたが、ここで発生する可能性のあるケースはどれかわかりません。

一方、前述したように、これは 2 つの異なるルーターの背後で発生します。そのうちの 1 つ (成功した方) では、サーバーのホスト IP を取得するための DNS クエリの後、クライアントが TCP SYN を送信し、サーバーによって ACK が返されます。一方、もう 1 つのルーターでは、クライアントが SYN を送信し、サーバーが ACK を送信し、クライアントが直後に RST を送信します。これは、接続を閉じていることを示している可能性があります。

どのような場合に rabbitmq クライアントがサーバーに RST を発行できるのかを理解したいと思います。

関連情報