BeginRecieve 呼び出しで提供されるコールバックがいつトリガーされるのか疑問に思っていました。
- バッファが保持できるほど多くのデータを受信したときですか?もしそうなら - データがバッファよりも小さい場合はどうなりますか)
- TCP/IP パケットを 1 つ受信したときですか?
- それは何か他のものですか?
あまり明確にできないので、繰り返します。
現在、すべてのドキュメントには、BeginReceive で指定されているように、「データが受信される」とすぐにコールバックが呼び出されると記載されています。しかし、これはかなりあいまいです: 他のプロセスがどのようにデータを提供しているかを正確に知らない場合、その瞬間は正確にはいつですか?
基準の 1 つは、状態オブジェクトのバッファーが指定されたバッファーサイズまで満たされると、BeginReceive() が完了したと見なされる (したがって、callbask が呼び出される) ことです。しかし、「配信」プロセスがデータを未知の量で不規則なパターンで供給している場合はどうなるでしょうか? たとえば、最初に 100 バイトを連続して配信し、次に 1 ミリ秒の時間間隔があり、さらに 200 バイトが続く場合: BeginReceive は 100 バイトの着信データで完了しますか? それとも300?
http://www.pcreview.co.uk/forums/exactly-beginreceive-socket-considered-completed-t2899270.html