SAN において accept() の直後にデータが到着すると接続中のソケットに FD_READ イベントが通知されない

この記事は、以前は次の ID で公開されていました: JP289232
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
システム エリア ネットワーク (SAN) 接続では、プログラムからリスナ ソケットに対して EventSelect を呼び出し、さらに accept を呼び出した直後にデータが到着すると、そのプログラムは接続中のソケットに FD_READ イベントが通知されるまで無期限に待機してしまいます。

また、次のような状況では別の競合状態が発生することもあります。
  • 利用可能な受信バックログが 0 になった場合。
  • サーバー側で accept が呼び出され、それによって利用可能なバックログが 1 つ増えた場合。
  • インクリメントが行われる前に接続を試みた場合。
このような競合状態は、サーバーが接続を拒否する原因となります。
原因
この現象は、Windows 2000 の Afd.sys ドライバに不適切な設定が含まれているために発生します。
状況

Windows 2000

この問題を解決するためのモジュールは、Windows 2000 日本語版 Service Pack 2 以降に含まれております。
Windows 2000 日本語版の最新 Service Pack については、以下 Web サイトから入手できます。
詳細
プログラムの中には、ソケット上で発生したネットワーク イベントの通知を受け取るために WSAEventSelect や WSAEnumNetworkEvents/WaitForSingleObject を呼び出すものが数多くあります。この問題は、接続されているソケットへの FD_READ イベントを待機するすべてのプログラムで発生する可能性があります。この問題が発生すると、プログラムのスレッドは FD_READ が通知されるまで無期限に待機してしまいます。
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 289232 (最終更新日 2001-04-21) をもとに作成したものです。

プロパティ

文書番号:289232 - 最終更新日: 02/02/2014 22:23:56 - リビジョン: 3.0

  • Microsoft Windows 2000 Professional
  • Microsoft Windows 2000 Service Pack 1
  • Microsoft Windows 2000 Service Pack 1
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Advanced Server
  • kbnosurvey kbarchive kbbug kbnetwork kbpending kbwin2000x KB289232
フィードバック