前節のクライアントプログラムでは、ioctlsocketでソケットを非ブロッキングモードに設定し、 recvを一定間隔で呼び出すという実装になっていました。 このような実装にした理由は、recvの呼び出しでブロッキングしてしまっては、 スレッドが終了フラグの値を確認することができなくなるからです。 しかしながら、この問題はWSA(Windows Sockets API)のWSAWaitForMultipleEventsを使用すれば簡単に解決することができます。 この関数は、単一または複数のイベントオブジェクトがシグナル状態になるまでブロッキングするため、 終了フラグをTRUEにする代わりに、イベントオブジェクトをシグナル状態に変更すればよいことになります。 DWORD WSAWaitForMultipleEvents( DWORD cEvents, const WSAEVENT *lphE