http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/asteroid/?root=svn
すでに公式でWindowsへの対応が表明されているけど、勉強ってことで。WinSock2が使える環境なら、たぶんビルド可能。
とりあえず「5分で作るチャット」を作って、FirefoxとOperaで動作確認。IEはなんかカチカチ鳴ってるけど、ほかの問題だと思う・・・
仕組みとか
WinSockのEvent関係のAPIを使って、epollをエミュレート。
あとは本体の細かい部分(宣言がブロックの先頭にない、EAGAIN→EWOULDBLOCK…etc)、ちまちまと修正。
#ifdef _WIN32で必要な部分だけ処理を変えればいいかなと思ってたら、あまりのインターフェースの違いに断念。ふつーにselectを使ってもよかったかも。
問題点
- 「64 ソケット」制限
- 解決策ってあるのかな…
- 通信中にサーバを落とすとクライアントまで落ちる(w