gpt4 book ai didi

使用 CZMQ 的 zsock_new_stream 时无法获取套接字标识

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:57 25 4
gpt4 key购买 nike

为什么我无法获取通过 zsock_new_stream 创建的套接字的标识? zmq_getsockopt 返回 -1。

zsock_t *socket = zsock_new_stream("tcp://127.0.0.1:5555");

uint8_t id [256];
size_t id_size = 256;

int rc = zmq_getsockopt (socket, ZMQ_IDENTITY, id, &id_size);
assert(rc == 0);

使用旧的已弃用的 zsocket 工作正常,见下文:

zctx_t *ctx = zctx_new();
void *sock = zsocket_new(ctx, ZMQ_STREAM);
int rc = zsocket_connect(sock, "tcp://127.0.0.1:5555");

uint8_t id [256];
size_t id_size = 256;

int rc = zmq_getsockopt (socket, ZMQ_IDENTITY, id, &id_size);
assert (rc == 0);

是否存在使用 zsock_new_stream 的示例?

最佳答案

“非套接字上的套接字操作”错误的发生是因为您混淆了 CZMQ zsock_t 套接字对象和底层 ZeroMQ 套接字这两个独立的概念。您可以使用 zsock_resolve() 函数访问后者,因此以下工作正常(至少在它成功返回并填充 id 和 id_size 变量的意义上):

int rc = zmq_getsockopt (zsock_resolve(socket), ZMQ_IDENTITY, id, &id_size);

我怀疑 ZMTP 规范在这里不相关,因为 STREAM 套接字(根据定义)不实现 ZMTP 协议(protocol)。话虽如此,我自己没有使用过 STREAM 套接字,所以我不知道这种方法在实践中是否有效。

关于使用 CZMQ 的 zsock_new_stream 时无法获取套接字标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33057169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com