4

ネットワークデータを受信するためにループで関数を使用していrecvますが、ループの途中でデータの受信を停止したいとしましょう。ループを中断することはできますが、これはデータの受信を停止するための非常にクリーンな方法とは思えません。

それで、データの受信をきれいに停止する方法はありますか、それともループを壊すだけですか? HTTP GET/POST リクエストです。

ここで私が使用している単純化されたものです:

do {
  nDataLen = recv(mySocket, data, BUFFSIZE, 0);
  if (nDataLen > 0)
  {
    /* Process Data */
    // I'd like to break out of the loop
    // if something is found when processing the data
    // But, I want to do this cleanly.
  }
} while (nDataLen != 0);
4

3 に答える 3

3

recv ループから抜け出しても、接続は閉じられません。recv の呼び出しを停止して、ソケットからのデータの読み取りを停止するだけです。ピアからのデータは引き続きソケットに到着します。きれいにシャットダウンしたい場合はclose、ソケットファイル記述子を呼び出します。

于 2011-09-30T04:48:36.030 に答える
0

ソケットが必要ない場合は、ソケットを閉じてループから抜け出します。

于 2011-09-30T04:42:54.417 に答える
0

ループから抜け出すことは、呼び出しをやめる方法ですrecv。もう 1 つは、ブール値を含めてshould_stop、ループ条件でそれをチェックすることです。ただし、ソケットに残っているものはすべて受け取り、適切に閉じる必要があります。

于 2011-09-30T04:39:25.657 に答える