TCP RST при инициировании AMQP-рукопожатия

TCP RST при инициировании AMQP-рукопожатия

Я запускаю rabbitmq-c v0.8.0 на OpenWRT (ar71xx) в устройстве, работающем как клиент в локальной сети. Одна и та же система, похоже, ведет себя по-разному за разными маршрутизаторами.

Проблемы, которые я вижу, следующие (это часть моего кода):

_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 я понял, что эти два кода возврата в основном полагаются на вызовы poll() или connect(), но я не могу понять, какой из возможных случаев может здесь иметь место.

С другой стороны, как я уже упоминал, это происходит за двумя разными маршрутизаторами; на одном из них (успешный) я вижу, что после DNS-запросов для получения IP-адреса хоста сервера клиент отправляет TCP SYN и ACK от сервера, в то время как на другом клиент отправляет SYN, сервер ACK и клиент сразу после этого отправляет RST, что может означать закрытие соединения.

Мне бы хотелось понять, в каких случаях клиент rabbitmq может отправлять RST на сервер.

Связанный контент