【发布时间】:2011-01-07 09:29:49
【问题描述】:
我正在使用 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* 函数都处理未压缩域中的字节数/偏移量,并且 tell (seek) 不适用于套接字。
zlib.h 标头显示“该库也可以选择性地在内存中读取和写入 gzip 流。”写入缓冲区会起作用(然后我可以随后将缓冲区写入套接字),但我看不到如何使用接口来做到这一点。
【问题讨论】: