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

C++ 在一条UDP消息中发送两个数据块而不复制数据块?,c++,memory-management,udp,C++,Memory Management,Udp,我想通过我自己定义的UDP发送大量消息对象my_message: class my_message { private: // Message header header_type header; // Message text byte * data; public: ... } 但是,如果我发送这个类的一个实例,头将沿着指针(而不是实际数据)发送。因此,简单的想法是在发送头和数据之前将它们复制

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

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向量)结构发送到一个数据包中


这可能就是您要查找的内容。

是否有问题阻止您阅读sendmsg()的手册页,其中有您自己使用sendmsg()的示例?你的英语似乎不错,那么你为什么要等别人向你解释你自己可以从sendmsg()的手册页上读到的东西呢?如果sendmsg()的文档中有不清楚的地方,你当然可以问一个具体的问题。你知道这个叫“www.google.com”的网站吗?在那里你可以输入“sendmsg example”,并获得数百个示例的链接。很有趣,我在这里读到的问题有一半可以通过简单的谷歌搜索得到答案。你也可以使用
writev()
来实现这个目的。@SamVarshavchik,你说得对,亲爱的。我读了很多书,但我需要一个钥匙世界。我应该读更多的。