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

时间:2015-12-13 00:44:03

标签: c++ memory-management udp

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

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

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

但是,如果我发送此类的实例,标题将沿指针(而不是真实数据)发送。因此,简单的想法是在发送之前将标头和数据复制到缓冲区中。

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

这可能就是你要找的东西。