您是否仅在数据报模式下使用谷歌协议缓冲区?

时间:2012-05-16 10:01:45

标签: protocol-buffers

如果我的定义只是重复的字符串,我可以通过get_packed_size调用找到打包缓冲区的长度。但是,如果我在交换的接收端,如何知道要读取多少字节以形成完整的消息? (由于条目数量可变,因此不熟悉apriori。)

发信人:

length = <name>_get_packed_size(&message)
buffer = malloc(length)
<name>_pack(&message, buffer)
write(fd, buffer, length)

接收器:

read(fd, buffer, ???)       // what is '???' if 'fd' is a stream socket?

如果我处于数据报模式,我可以发出类似64K字节的读取,然后获取整个消息。但是,如果我处于流模式,如何在不短暂更改消息或阅读下一条消息的一部分的情况下执行此操作?

1 个答案:

答案 0 :(得分:1)

有关此常见问题的典型解决方案,请参阅此答案:https://stackoverflow.com/a/5586945/618259