0

私は、2 つの異なるポートにバインドされた 2 つのソケットを持つプログラムを作成していました。別のファイルにある別のプログラムのオブジェクトを作成しました(また、初期化され、別のポートにバインドされたソケットがあります)。実行時例外が発生し、WSAGetLastError を出力しようとするとエラー コード 10093 が返されました。

私が知りたいのは、WSAStartup() と WSACleanup() をどのように使用できるかということです。ソケットごとに WSAStartup() を呼び出し、WSACleanup() を 3 回呼び出す必要がありますか。

誰かがこの問題を克服するのを手伝ってくれますか? 前もって感謝します..:-)

4

2 に答える 2

3

WSAStartup()/WSACleanup()は、プログラムごとに、つまりプログラムごとに 1 回呼び出す必要があります。

于 2012-05-21T10:35:44.440 に答える
0

winsock dll を使用している場合は WSAStartup を (アドレス空間\プロセスで) 1 回呼び出すだけでよく、ソケットの使用が終了した場合は WSACleanup を呼び出す必要があります。

私は通常、次のような方法で起動/クリーンアップを実装します: (これは実際にはシングルスレッド アプリケーションでのみ安全ですが、マルチスレッドでミューテックスを使用することは難しくありません...)

class HigherLevelSocketWrapper
{
private:
    static int m_iInstanceCount = 0;

public:
    HigherLevelSocketWrapper()
    { 
        //Check if m_iInstanceCount is 0, if so, call WSAStartup.
        //increment m_iInstanceCount
    }
    virtual ~HigherLevelSocketWrapper()
    { 
        //decrement m_iInstanceCount
        //Check if m_iInstanceCount is 0, if so, call WSACleanup.
    }
};
于 2012-05-21T10:40:11.740 に答える