• 締切済み

WINSOCKのWSACleanupについて

WINSOCKのWSACleanupについて質問です。 現在、ソケット情報を3つ保有しているソケット通信プログラムがあります。 そのうちの1つのソケットを使用してデータの送受信を行っている際に、何らかのエラーが発生した場合、closesocketを行った後、WSACleanupを使用すると、 エラーのあったソケット情報だけでなく、 他の2つのソケット情報まで強制的に破棄してしまうのでしょうか? それとも、WSACleanupでこのソケット情報を破棄みたいな指定はできるのでしょうか? こんな状況な場合は、オープン時にソケット情報の 初期化を行っていれば、WSACleanupは行わなくても 大丈夫でしょうか? 何か知識をお持ちの方がいらっしゃいましたら、 助言、宜しくお願いいたします。

みんなの回答

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

>初期化すればWSACleanupは使用しなくても >問題ないでしょうか? そうです。なんどもいうようですが、他のソケットが 通信中なのにWSACleanupをしてはいけません。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

WSACleanupってそもそも何の引数もとれませんよね。 これはソケットに対して行うものではなく プロセス終了前に呼び出すものです。 WSAStartupとWSACleanupはひとつのアプリケーション(プロセス)で 基本的に1対あれば十分で、普通それ以上必要としません。 >WSACleanupを使用すると、 >エラーのあったソケット情報だけでなく、 >他の2つのソケット情報まで強制的に破棄してしまうのでしょうか? そのままソケット通信を続けて どういう挙動を起こすかはわかりませんが、基本的にしてはいけません。

nixon_special
質問者

お礼

早速の回答ありがとうございます。 今回のような アプリケーション:ソケットプログラムが 多:1の場合、複数のソケット情報をもつしか 方法がないと思います。 ということは、他のソケット情報は破棄したくないので、 Closesocketしたソケット情報をオープン時に 初期化すればWSACleanupは使用しなくても 問題ないでしょうか?

関連するQ&A