9

ソケットを使用してサーバーからデータをダウンロードするc++win32プログラムがあります。

Windowsでソケットを使用する前に、WSAStartupを呼び出す必要があります。MSDNによると、「WSAStartupへの呼び出しが成功するたびにWSACleanupへの呼び出しが必要です。実際のクリーンアップを実行するのは最後のWSACleanup関数呼び出しのみです。」

私にとって最も簡単な方法は、サーバーからデータをダウンロードするたびにWSAStartup/WSACleanupを呼び出すことです。ほとんどの場合、一度に1つの接続しかないため、WSACleanupが実際のクリーンアップを実行します。

だから私は疑問に思っています、WSAStartupとWSACleanupのコストは何ですか?私は実際のクリーンアップを実行することを意味します。WSAStartupとWSACleanupの呼び出しが、ソケット接続全体と比較して短時間しか続かない場合は、簡単な方法を使用できます。そうでない場合は、プログラムを終了するときにのみWSACleanupを呼び出すように注意する必要があります。

4

3 に答える 3

14

WSAStartup() は、必要な dll をロードします。しかし、dll が既にロードされている場合、WSAStartup() は単純にカウンターを増やします。WSACleanup() はカウンターを減らし、カウンターがゼロになると dll を解放します。

アプリケーションの init 関数で WSAStartup() を呼び出し、アプリケーションを終了する直前に WSACleanup() を呼び出す必要があります。

于 2008-12-28T18:37:54.490 に答える
3

WSAStartup を 1 回呼び出すだけで、クリーンアップは不要です。真剣に、これは Win3.1 と Win32s からの残りのアーキテクチャの一種です。

于 2008-12-29T01:17:22.437 に答える