4

これが私の状況です。私は winsock を使用しており、ネットワークとプロトコルの開発についていくつかのことを学んでいますが、行き詰まりに陥っています。私は現在、受け入れ呼び出しでブロックするサーバーを実行していますが、バックグラウンドでユーザー入力を待機し、ユーザー入力を処理する別のスレッドを持っています。このユーザー入力は、send、ping、say などのコマンドに使用されますが、winsock をシャットダウンし、開いているすべての接続を解放し、プログラムを終了する exit というコマンドが必要です。問題は、この受け入れスレッドがまだブロックされていることです。

それでは質問です。1)とにかく、呼び出されている間にwinsock関数がブロックされるのを止める方法はありますか?2)非ブロックモードでは次のようになります:

while(m_continue)
{
      Sleep(1);
      tempsock = accept(m_listenSock, NULL, NULL);
      if(tempsock != INVALID_SOCKET)
      {
            if(WSAGetLastError() == WSAEWOULDBLOCK)
                  continue;
            else 
                  return 1;
      }
      break;
{

余分な、または使用するにはあまりにも非効率的ですか?

4

1 に答える 1

3

ユーザーコマンドスレッドから、「exit」コマンドを処理するときに、m_listenSockソケットを閉じます。ブロッキングaccept()呼び出しは、ですぐにドロップアウトしINVALID_SOCKETます。

m_listenSockハンドルを2回閉じないように注意してください。

于 2012-04-14T06:45:56.347 に答える