2

典型的なソケット プログラムの例は次のようになります。

while(1){
   data = socket.recv()
   //do some work
}

パッケージがいつ到着するかわからないため、リスニングポートからデータを取得するまでブロックする必要があります.プログラムが別の側からコマンドを受信した後、重い作業を開始した場合、作業中に別のパッケージが到着しましたが、その瞬間、あなたは仕事をしていて、ポートをリッスンしていません。仕事をどんなに速く処理しても、パッケージを見逃す可能性があります。

では、ソケットはどのように機能してすべてのデータを失うことなく処理するのでしょうか?

4

1 に答える 1

2

オペレーティング システムには、ネットワークから受信されたがまだアプリケーションによって処理されていないパケットを保持する受信 バッファがあります。recv()そのバッファがいっぱいになると、パケットが失われます。recv()パケットが到着したときに通話中である必要はありませんが、バッファーがオーバーフローしないように十分な頻度で呼び出すようにする必要があります。

于 2013-08-19T17:15:57.833 に答える