我在 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。