分享zframe_send使用过程中 的一个小问题

简介: 在zframe_send函数中,第一个参数是一个指向zframe_t指针的指针。这是因为在发送帧之后,该函数会销毁帧并将你的指针设置为NULL。这样做是为了防止你再次使用已经被销毁的帧。

在zframe_send函数中,第一个参数是一个指向zframe_t指针的指针。这是因为在发送帧之后,该函数会销毁帧并将你的指针设置为NULL。这样做是为了防止你再次使用已经被销毁的帧。


所以,如果你的发送数据后续还要使用,可以使用zframe_dup函数处理这种情况。 你需要创建一个新的zframe_t指针,并将sendData的内容复制到这个新的帧中,然后发送这个新的帧。


这是一个可能的解决方案:


void messageListeningProcessingBranch(zsock_t *sDataSock, const zframe_t &sendData)
{
    zframe_t *frame = zframe_dup(&sendData);  // 创建一个新的帧并复制sendData的内容
    zframe_send(&frame, sDataSock, 0);  // 发送新的帧
}


在这个函数中,zframe_dup函数会创建一个新的zframe_t对象,并将sendData的内容复制到这个新的对象中。然后,zframe_send函数会发送这个新的帧,并在发送之后销毁它。


附赠一些相关函数的介绍。

使用ZeroMQ库中的zframe模块进行消息的接收和发送。下面是相关函数的使用介绍:


  1. zframe_recv(responder): 这个函数用于从指定的套接字(在这里是responder)接收一个帧。如果接收成功,它将返回一个新的zframe_t对象,否则返回NULL。这个函数会阻塞,直到有一个帧可以接收。


  1. zframe_strdup(frame_recv): 这个函数用于复制一个帧的数据并将其作为一个新的字符串返回。这个字符串需要在使用完毕后通过free()函数释放。


  1. zframe_size(frame_recv): 这个函数用于获取一个帧的大小,以字节为单位。


  1. zsys_info("Received: %s", message): 这个函数用于打印信息。在这里,它被用来打印接收到的消息。


  1. zframe_send(&frame_recv, responder, 0): 这个函数用于将一个帧发送到指定的套接字(在这里是responder)。第三个参数是一个标志,用于指定发送的方式。在这里,它被设置为0,表示这个函数在发送帧后不会销毁它。如果发送成功,这个函数将返回0,否则返回-1。


  1. free(message): 这个函数用于释放之前通过zframe_strdup()函数复制的字符串。


以上代码的组合使用的一个实例如下


zframe_t *frame_recv = zframe_recv(responder);//responder 是创建的接收套接字
if (frame_recv)
{
    char *message = zframe_strdup(frame_recv);
    print_hex(message, zframe_size(frame_recv));
    zsys_info("Received: %s", message);
    zframe_send(&frame_recv, responder, 0);  // 直接转发接收到的消息
    free(message);  // 释放复制的字符串
}


分享一个有趣的 学习链接:https://xxetb.xet.tech/s/HY8za

目录
相关文章
|
设计模式 测试技术 编译器
C++项目中打破循环依赖的锁链:实用方法大全(一)
C++项目中打破循环依赖的锁链:实用方法大全
1243 0
系列文章深度解读|SwiftUI 背后那些事儿
前言 今年苹果的WWDC你看了吗?苹果在2019年的WWDC的重头戏当然非SwiftUI莫属:全新的声明式语法、绑定式API、和响应式变成框架Combine。这一切的一切都预示着即将在Apple Native布局系统掀起一场革命。
17948 0
|
10月前
|
监控 安全 定位技术
《C++新特性:为多线程数据竞争检测与预防保驾护航》
多线程编程是提升软件性能的关键,但数据竞争问题却是一大挑战。C++新特性如增强的原子类型和完善的内存模型,为检测和预防数据竞争提供了有力支持。这些改进不仅提高了程序的可靠性,还提升了开发效率,使多线程编程更加安全高效。
138 19
|
12月前
|
网络协议 开发工具 git
hexo github部署,通过域名访问你的博客
本文介绍了如何使用Hexo命令部署博客到GitHub,并详细说明了如何通过自定义域名访问GitHub上部署的博客。
hexo github部署,通过域名访问你的博客
|
数据库连接 API 数据库
SQLite3 数据库 C语言API 打开函数sqlite3_open 详解
SQLite3 数据库 C语言API 打开函数sqlite3_open 详解
673 0
|
XML JSON Java
GRPC与 ProtoBuf 的理解与总结
GRPC与 ProtoBuf 的理解与总结
629 0
|
算法 调度 数据库
【C++20 新特性 Calendar (C++20) − Time zone (C++20)】时间的艺术与科学: C++中的现代日期和时区处理
【C++20 新特性 Calendar (C++20) − Time zone (C++20)】时间的艺术与科学: C++中的现代日期和时区处理
569 3
|
消息中间件 Unix Linux
【ZMQ polling机制】ZMQ异步接收机制以及与epoll/select的对比分析
【ZMQ polling机制】ZMQ异步接收机制以及与epoll/select的对比分析
885 0
|
消息中间件 监控 负载均衡
ZeroMQ综合指南
ZeroMQ综合指南
2799 0
|
前端开发 JavaScript 架构师
什么是 MVVM?
什么是 MVVM?
187 0