zlib を使用して gzip 圧縮を実行しています。zlib は、データを圧縮した後、開いている TCP ソケットにデータを直接書き込みます。
/* socket_fd is a file descriptor for an open TCP socket */
gzFile gzf = gzdopen(socket_fd, "wb");
int uncompressed_bytes_consumed = gzwrite(gzf, buffer, 1024);
(もちろん、すべてのエラー処理は削除されます)
問題は、ソケットに書き込まれたバイト数をどのように判断するかです。zlib のすべての gz* 関数は、圧縮されていないドメインのバイト カウント/オフセットを処理します。
zlib.h ヘッダーには、「このライブラリは、必要に応じてメモリ内の gzip ストリームを読み書きすることもできます」と記載されています。バッファへの書き込みは機能します (その後、バッファをソケットに書き込むことができます) が、インターフェイスでそれを行う方法がわかりません。