2012-05-16 20 views
0

如果我有一个只有重复字符串的定义,我可以通过get_packed_size调用找到打包缓冲区的长度。但是,如果我在交换机的接收端,我怎么知道要读取多少个字节才能形成完整的消息? (由于存在条目数量可变的,它是不知道先验)您是否仅在数据报模式下使用google协议缓冲区?

发件人:

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字节的内容,然后获取整个消息。但是,如果我处于流模式下,如何在不改变消息或阅读下一部分消息的情况下做到这一点?

回答