启动 AMQP 握手时 TCP RST 输入

启动 AMQP 握手时 TCP RST 输入

我在 OpenWRT (ar71xx) 上运行 rabbitmq-c v0.8.0,该设备充当 LAN 中的客户端。同一系统在不同的路由器后似乎表现不同。

我看到的问题是(这是我的代码的一部分):

_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 并由服务器确认,而在另一个中,客户端发送 SYN,服务器确认,客户端随后发送 RST,这可能意味着它正在关闭连接。

我想了解在哪些情况下 rabbitmq 客户端可以向服务器发出 RST。

相关内容