• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WinSockのクライアント処理)

WinSockのクライアント処理についての質問

このQ&Aのポイント
  • WinSockを使用してクライアントからサーバへのデータ要求を行うプログラムを作成中ですが、netstrtでの確認結果により、多くのTIME_WAIT状態が発生しポートが溢れることがあります。
  • 対策として、WSAStartupとWSACleanupをクライアント起動時に行うこと、さらにsocketとconnectもクライアント起動時に行うことを考えています。
  • 一般的なTIME_WAIT対策などについてアドバイスをいただけないでしょうか。

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

  • ベストアンサー
  • mssine
  • ベストアンサー率24% (38/156)
回答No.1

質問の内容から、 ・クライアントプログラムは常に動いている。 ・リクエストがあったら、サーバに要求電文をsendする ・サーバからの電文をrecvして表示する と判断します。 この場合、 >私の考えは適切なのでしょうか? 私ならNoです。 その前に、 >"TIME_WAIT"が多数発生しポートが >あふれてしまう事があります。 これは???です。 手順で気になったのは recvはデータを全部受信できるまでしていますか? サーバ側が1回のsendであってもクライアントでは複数回のrecvが必要となる場合もあります。 全部受信していないのにcloseしちゃうのでTIME-WAITが発生しているのではありませんか? (このあたりはあまり詳しくありません) あとは、 closesocketの前にshutdownするべきだと思います。 話を戻します。 socketは良いとしてもconnectはダメだと思われます。 サーバが動いていない場合がありますので。。 またsendでエラーになったときは、shutdown/closesocketをしますので、 そうするとsocketとconnectは同じループ内でやるのがスジだと思います。

jun_j
質問者

お礼

有難うございます。 >そうするとsocketとconnectは同じループ内でやるのがスジだと思います。 やはりそうですか。 また、色々調べた所、あるクライアントが通信中のソケットを別のクライアントがcloseしてしまい、 ソケットが通信中のまま残ってしまう事が原因と分かりました。 又宜しくお願いします。

関連するQ&A