0

文字列の繰り返しだけの定義がある場合、get_packed_size 呼び出しを介してパックされたバッファーの長さを見つけることができます。しかし、私が交換の受信側にいる場合、完全なメッセージを形成するために読み取るバイト数をどのように知ることができますか? (エントリの可変数があるため、アプリオリにはわかりません。)

送信者:

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 バイトなどの読み取りを発行して、メッセージ全体を取得できます。ただし、ストリーム モードの場合、メッセージを短く変更したり、次のメッセージの一部を読み取ったりせずにこれを行うにはどうすればよいでしょうか?

4

1 に答える 1

1

この一般的な問題の典型的な解決策については、この回答を参照してください: https://stackoverflow.com/a/5586945/618259

于 2012-05-17T04:58:11.413 に答える