【发布时间】:2012-12-18 15:40:16
【问题描述】:
我正在通过 Win32 命名管道实现 ZeroMQ wire format。该格式需要在消息前面加上其大小。我的界面看起来像send(std::vector<unsigned char>),因此用户已经分配了一个与其数据的确切大小相同的缓冲区,我根据vector.size() 构建大小标头。
目前我正在将大小标头以独立写入的方式发送到管道。但随后,如果实际消息内容的后续写入失败,则数据流处于错误状态,接收方期望更多数据,但发送方认为该消息失败。
我想将尺寸标头和内容合并到一个管道写入中,因此标头不会自行通过。但我想避免复制vector 的内容,因为它可能很大。有没有办法将两个缓冲区组合成一个 Win32 管道写入?
如果没有,我总是可以添加类似unsigned char *getPipeBuffer(size_t size) 的内容,为标题分配额外空间。但是最好保持界面不变。
【问题讨论】:
标签: c++ winapi pipe named-pipes zeromq