我想通过我自己的定义my_message
的UDP发送大量的消息对象:
class my_message
{
private:
// Message header
header_type header;
// Message text
byte * data;
public:
...
}
但是,如果我发送此类的实例,标题将沿指针(而不是真实数据)发送。因此,简单的想法是在发送之前将标头和数据复制到缓冲区中。
如您所知,UDP对消息而不是流进行操作,这意味着sendto()
和recvfrom()
之间存在一对一的关系。即sendto()
两次无法在recvfrom()
中接收数据。
我的问题:将数据复制到新缓冲区会降低我的应用程序的效率。
可以考虑将发送分为发送标头和发送数据。这不起作用,因为UDP消息在接收时没有排序。
我的问题:有没有办法通过阅读两个不同来源告诉应用程序sendto()
该消息?
答案 0 :(得分:2)
sendmsg采用iov,允许您通过iov(IO-Vector)结构指定来自不同位置的数据发送到一个数据包。
这可能就是你要找的东西。