是啥导致 ZeroMQ 中的“传输端点未连接”?

Posted

技术标签:

【中文标题】是啥导致 ZeroMQ 中的“传输端点未连接”?【英文标题】:What causes "Transport endpoint is not connected" in ZeroMQ?是什么导致 ZeroMQ 中的“传输端点未连接”? 【发布时间】:2020-09-27 15:48:11 【问题描述】:

我正在开发使用 ZeroMQ(4.0.1 版)的产品。

服务端和客户端基于 ZeroMQ ROUTER-socket 进行通信。

为了读取套接字事件,服务器和客户端还创建套接字监视器套接字 (PAIR)。服务器绑定和侦听三个端口。在这三个端口中,一个端口处于非安全模式。其他两个端口正在使用md5-authentication。

我面临的问题是,服务器和客户端都自发地接收到其中一个安全端口套接字的套接字断开连接(请参阅下面的日志)。我已经多次检查服务器和客户端都具有彼此的 L3 可达性。

我还应该检查什么? 究竟是什么触发了这种错误场景?

zmq_print_callback:ZmQ: int zmq::stream_engine_t::read(void*, size_t):923
                        Stream engine recv():
                        TCP socket (187) to unknown:0 was disconnected
                        with error 107 [Transport endpoint is not connected]

【问题讨论】:

【参考方案1】:

以下事件序列可能会在服务器上触发此错误

    服务器收到 clientY 的 ACCEPTED 事件并获取 FD1。 发生链路抖动/网络问题,clientY 断开连接,但服务器未收到此断开连接。 网络恢复,clientY 连接回服务器。 服务器收到 clientY 的 ACCEPTED 事件并获取 FD2。但是,发送到此套接字的数据包不会离开服务器。 大约 1 分钟后,clientY 收到 FD1 的“Transport endpoint is not connected error”。 应用程序可以使用它来处理客户端断开连接。

【讨论】:

以上是关于是啥导致 ZeroMQ 中的“传输端点未连接”?的主要内容,如果未能解决你的问题,请参考以下文章

Gunicorn 因 OSError 失败:[Errno 107] 传输端点未连接

android java.io.IOException:传输端点未连接

是啥导致了这个 Heroku mysql 连接错误? (尝试将前端连接到后端 POST 请求)

drawRect 中的崩溃 - 是啥原因导致的?

通过 ZeroMQ 以字符串形式接收对象然后通过另一个套接字以零副本发送它的正确方法是啥?

使用 ZeroMQ 实现消息总线