我正在通过 Win32 命名管道实现ZeroMQ 线路格式。该格式需要在消息前面加上其大小。我的界面看起来像send(std::vector<unsigned char>)
这样,用户已经为其数据的确切大小分配了一个缓冲区,并且我基于vector.size()
.
目前,我正在将大小标头以独立写入的方式发送到管道。但是,如果实际消息内容的后续写入失败,则数据流将处于错误状态,接收方期望更多数据,但发送方认为该消息失败。
我想将大小标头和内容组合成一个管道写入,因此标头不会自行通过。但我想避免复制vector
's 的内容,因为它可能很大。有没有办法将两个缓冲区组合成一个 Win32 管道写入?
如果没有,我总是可以添加类似的东西unsigned char *getPipeBuffer(size_t size)
,为标题分配额外的空间。但是最好保持界面不变。