在一条UDP消息中发送两个数据块,而不复制数据块

Sending two data blocks in one UDP message without copying the blocks?

本文关键字:数据 两个 复制 消息 UDP 一条      更新时间:2023-10-16

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

class my_message
{
    private:
        // Message header
        header_type header;
        // Message text
        byte * data;
    public:
        ...
}

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

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

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

可以考虑将发送拆分为发送标头和发送数据。这将不起作用,因为UDP消息在接收时没有排序。

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

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

这可能就是你想要的。

相关文章: