• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:延々と受信し続けるwinsockのrecv)

winsockのrecvで受信し続ける理由とその解決法

このQ&Aのポイント
  • winsockのrecvで受信し続ける理由とは、クライアントプログラムが送信したデータをサーバープログラムが受け取れていないためです。
  • この問題を解決するためには、サーバープログラムのrecv関数の代わりにrecv関数の戻り値を確認する必要があります。
  • recv関数の戻り値が0の場合は、クライアントプログラムが接続を切断したことを意味します。この場合は、その接続を解放する処理を行う必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

> while( Flag == 0 ) > { >  recv( *SendSock, Str, 5, 0 ); > } このループはいつ終了するんでしょう? ループ中にFlagは変化しませんから最適化で無限ループになっていたりしませんか? recv()の戻り値は捨てていますが、クライアントが切断したらrecv()が0を返却していたりしませんか? # その際『Str[]の内容は変化しない』のを受信し続けていると認識していませんか? recv()で5バイト受信できない。ということも可能性としてはあり得ますがその辺りはどう考えていますか? # 2バイト、3バイトと受信する可能性がある。 # まぁ実際にはないでしょうけど。

Null0lluN
質問者

お礼

バグが起こるプログラムでバグに関係ないと思われる箇所を削っていったため、一生終らないループになってしまいました。 >その際『Str[]の内容は変化しない』のを受信し続けていると認識していませんか? 恥ずかしながらその通りでした。戻り値の事をすっかり忘れていました。 5バイト受信できない可能性に関してもwhileでの理由と同様に関係なさそうなので削除しました。(実際には5バイトではない) ありがとうございます。 凄い基本的なことを見落としていました。

関連するQ&A