2012-05-16 30 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字節的內容,然後獲取整個消息。但是,如果我處於流模式下,如何在不改變消息或閱讀下一部分消息的情況下做到這一點?

回答