WinSockで非同期にクライアントを接続

WinSockの関数にはブロック関数がいくつかあります。簡単なテストプログラムの場合にはそれでいいのですが、まず実用的ではありません。そこで非同期化を行うのですが、その仕組みもWinSockには準備されています。
下記にその流れをまとめてみました。

まず、非同期化したいイベントをWSAAsyncSelect関数で指定します。
そのイベント処理は、ウィンドウイベントの一つとして処理します。WSAAsyncSelect関数には、そのウィンドウのウィンドウハンドルと、イベントの名前を渡します。
上図のサンプルでは、イベント名はWM_TCPとして定義しています。
あとは、イベント処理部分に、SOCKET情報と、イベント情報(FD_ACCEPTなど)がわたってくるのでそこで、accept関数を呼び出し、接続処理します。

octech内関連エントリ