c++ - 在不复制 block 的情况下在一个 UDP 消息中发送两个数据 block ?

标签 c++ memory-management udp

我想通过我自己定义的 UDP 发送大量消息对象my_message:

class my_message
{
    private:
        // Message header
        header_type header;

        // Message text
        byte * data;
    public:
        ...
}

但是,如果我发送此类的一个实例,则 header 将与指针一起发送(而不是实际数据)。因此,简单的想法是在发送之前将 header 和数据复制到缓冲区中。

如您所知,UDP 对消息而不是流进行操作,这意味着 sendto()recvfrom() 之间存在一对一的关系。 IE。不可能 sendto() 两次 recvfrom() 一次接收数据。

我的问题:将数据复制到新缓冲区会降低我的应用程序的效率。

有人会想到将发送拆分为发送头和发送数据。这是行不通的,因为 UDP 消息在接收时没有排序。

我的问题:有没有办法告诉应用程序通过从两个不同的源读取消息来sendto()消息?

最佳答案

sendmsg 接受一个 iov,它允许您指定来自不同位置的数据通过 iov(IO-Vector)结构发送到一个数据包中。

这可能就是您正在寻找的。

关于c++ - 在不复制 block 的情况下在一个 UDP 消息中发送两个数据 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34246760/

相关文章:

C++ 函数返回类型

c++ std::map获取最高键低于X的元素?

c++ - 在 C 与 C++ 中动态初始化静态值

.net - 确定远程设备端点 UDP Clojure CLR

python - D 编程语言中的 UDP 套接字

c++ - 在 C/C++ 中使用多核支持

c# - 从 C++ 方法接收 char*,转换为托管字符串,然后释放内存

c# - CLR 是如何进行内存管理的

objective-c - iOS ivar alloc/init 分配内存地址给另一个ivar

c++ - epoll 对 udp 客户端来说是个坏主意吗?