Win32名前付きパイプを介してZeroMQワイヤ形式を実装しています。この形式では、メッセージの前にそのサイズを追加する必要があります。私のインターフェースは、ユーザーがすでにデータの正確なサイズのバッファーを割り当てているように見えますsend(std::vector<unsigned char>)
。そして、に基づいてサイズヘッダーを作成しvector.size()
ます。
現在、パイプへのスタンドアロン書き込みでサイズヘッダーを送信しています。しかし、その後の実際のメッセージコンテンツの書き込みが失敗した場合、データストリームは悪い状態のままになり、受信者はより多くのデータを期待しますが、送信者はそのメッセージが失敗したと見なします。
サイズヘッダーとコンテンツを1つのパイプ書き込みに結合して、ヘッダーがそれ自体を通過しないようにしたいのですが。vector
ただし、コンテンツはかなり大きい可能性があるため、のコンテンツのコピーは避けたいと思います。2つのバッファを1つのWin32パイプ書き込みに結合する方法はありますか?
unsigned char *getPipeBuffer(size_t size)
そうでない場合は、ヘッダーに余分なスペースを割り当てるようなものをいつでも追加できます。ただし、インターフェイスはそのままにしておくと便利です。