在不复制块的情况下在一个 UDP 消息中发送两个数据块?
Sending two data blocks in one UDP message without copying the blocks?
我想通过我自己定义的 UDP my_message
:
发送大量消息 objects
class my_message
{
private:
// Message header
header_type header;
// Message text
byte * data;
public:
...
}
但是,如果我发送此 class 的实例,header 将与指针一起发送(不是真实数据)。因此,简单的想法是在发送之前将 header 和数据复制到缓冲区中。
如您所知,UDP 对消息而不是流进行操作,这意味着 sendto()
和 recvfrom()
之间存在一对一的关系。 IE。不可能sendto()
两次,一次recvfrom()
接收数据。
我的问题:将数据复制到新缓冲区会降低我的应用程序的效率。
有人会想到将发送拆分为发送header和发送数据。这不会起作用,因为 UDP 消息在接收时没有排序。
我的问题:有没有办法告诉应用程序通过从两个不同的源读取消息来sendto()
消息?
sendmsg 接受一个iov,它允许你通过一个iov(IO-Vector)结构指定来自不同位置的数据发送到一个数据包中。
这可能就是您要找的。
我想通过我自己定义的 UDP my_message
:
class my_message
{
private:
// Message header
header_type header;
// Message text
byte * data;
public:
...
}
但是,如果我发送此 class 的实例,header 将与指针一起发送(不是真实数据)。因此,简单的想法是在发送之前将 header 和数据复制到缓冲区中。
如您所知,UDP 对消息而不是流进行操作,这意味着 sendto()
和 recvfrom()
之间存在一对一的关系。 IE。不可能sendto()
两次,一次recvfrom()
接收数据。
我的问题:将数据复制到新缓冲区会降低我的应用程序的效率。
有人会想到将发送拆分为发送header和发送数据。这不会起作用,因为 UDP 消息在接收时没有排序。
我的问题:有没有办法告诉应用程序通过从两个不同的源读取消息来sendto()
消息?
sendmsg 接受一个iov,它允许你通过一个iov(IO-Vector)结构指定来自不同位置的数据发送到一个数据包中。
这可能就是您要找的。