- ベストアンサー
TCP通信における受信バッファから上位アプリケーションへデータを渡すタイミングについて
- TCP通信における受信バッファから上位アプリケーションへデータを渡すタイミングについて教えてください。PSHフラグが立っているデータを受信すると上位アプリケーションへ渡すというのは学びましたが、その他のタイミングはどうなるのか不明です。
- TCP通信における受信バッファがいっぱいになった場合、受信側で勝手にデータを渡すのか、それとも送信側がPSHフラグを送ってくれるのか疑問です。また、OSに依存する動作なのか、アプリケーションごとに設定できるのかも知りたいです。
- 一部の情報では、現在はPSHフラグを無視しているとも言われていますが、それだとますますOSがデータをアプリケーションに渡しているように思えます。このあたりの動作について詳細を教えてほしいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
pushフラグは送信側が受信側に対して上位へのデータの即時引渡しを要求するフラグ。 あくまで要求なのでこのフラグが立っているかどうかで受信側がどう対処するかは実装依存。 性能が高くなっている今ならpushフラグをセットしていなくても上位への引渡しをすぐに行う実装も多いと思われる。 > 現在はPSHフラグを無視している というのはフラグの状態に無関係に適切なタイミングで受信側が処理している実装が多いという意味だろうと思われる。 そして、 > 例えば、PSHフラグのデータが来る前に受信バッファがいっぱいになってしまったら、受信側で勝手にデータを渡してしまうのでしょうか というのは当然勝手に渡すことになる。 pushフラグはセットしないことによって送信側が受信側にデータを上位へ渡すことを抑制させるためのフラグではないので。
その他の回答 (1)
- jeee
- ベストアンサー率52% (119/227)
TCP/IPの受信バッファは、アプリケーションレベルとTCPレベルのバッファがあり、アプリケーションレベルのバッファは、受信できるだけのバッファが必要になる思います。 つぎに、受信するための命令の関数の説明がります。 http://members.jcom.home.ne.jp/toya.hiroshi/winsock2/index.html?recv_2.html bufが受信するためのデータ領域のアドレス lenが受信できる長さ で受信できる長さ以上のデータが来た場合には、エラーとなり、WSAEMSGSIZEになります。 対策としては、上記に次の対策がかかれています。 「残りの部分を読みとるにはじゅうぶん大きなメモリをこの関数に渡してください。」 TCPレベルでは、TCP間で送受信の大きさが制御されます。 次の第37回から第43回を参照してください。 http://www5e.biglobe.ne.jp/~aji/3min/ 後は、受信側のTCPでは、受信した大きさごとにbufで示されるアドレスに順番に格納し、 受信し終わったら、受信命令が終了したことを通知する。
お礼
回答ありがとうございました。 アプリケーションレベルでもバッファが存在するのですね。 2個目のリンクのあたりの情報は知っているつもりですが、アプリケーションレベルのことはよくわかりませんでした。 時間があるときにもう少し詳しく読んでみようと思います。
お礼
PSHフラグはデータを上位に渡すことを抑制するわけではないのですね。 もうひと方詳しい回答をいただきましたが、私が聞きたかったことに対する回答はこちらの方が近かったため、ベストアンサーに選ばせていただきました。 回答ありがとうございました。