ZMQ 绑定 ZMQ_PUB 类型套接字时出现错误 19

问题描述 投票:0回答:1

我有一个简单的代码块,它建立一个 ZMQ_PUB 类型套接字来广播数据包。然而,我发现这段代码可以在某些 Windows 机器上运行,而不能在其他机器上运行。

工作机器详细信息:ZMQ版本4.3.5,Windows 11。 不工作的机器详细信息:ZMQ 版本 4.3.5,Windows 10。

#include <string>
#include <iostream>
#include <zmq.h>

this->publisher_context = zmq_ctx_new();
this->publisher_socket = zmq_socket(this->publisher_context, ZMQ_PUB);
assert(this->publisher_socket);
std::string address = "tcp://localhost:5556";
int broadcastConnect = zmq_bind(this->publisher_socket, address.c_str());
if (broadcastConnect != 0) {
    int error_code = zmq_errno();
    std::string text = "Broadcast socket did not connect correctly. ZMQ error code: " + std::to_string(error_code);
    std::cout << text.c_str() << std::endl;
}

此代码抛出 ZMQ 错误 19 (ENODEV)。

我在不工作的机器上尝试过的事情:

  • 使用
    netstat
    通过 cmd 检查我打开的 TCP 端口使用情况(端口未使用)
  • 此地址(tcp://localhost:5556)可用,我可以在同一端口上创建 ZMQ_REQ 类型套接字。绑定 ZMQ_PUB 错误。这告诉我
    localhost
    配置正确。此外,将地址字符串中的
    localhost
    替换为
    [::1]
    会产生相同的结果。
  • 暂时禁用我的 Windows Defender 防火墙域/私人/公共配置文件并重新启动,结果相同。

接下来我要尝试的事情:

  • 将不工作的机器升级到 Windows 11,尽管如果可能的话我宁愿不这样做。
windows tcp zeromq publish-subscribe windows-firewall
1个回答
0
投票

事实证明,要么该端口被秘密使用(但 netstat 未报告),要么该端口对与其交互的套接字类型有限制。将端口号从 5556 更改为 5570 解决了我的问题。但我不知道这个端口被封锁的根本原因是什么。

© www.soinside.com 2019 - 2024. All rights reserved.