Socketアドオンをビルドする
どうにか動くようになったっぽいのでメモメモ。
・Socket
まずここからlibevent-1.4.9を落とす。
解凍して、出来たフォルダ(libevent-1.4.9-stable)をMinGWのHomedirにコピー。
以下複数ファイルを修正。
[~/stevedekorte-io/addons/Socket/source/IoSocket.c] Line:422 -if (errorNumber == ECONNRESET) IoSocket_close(self, locals, m); +//if (errorNumber == ECONNRESET) IoSocket_close(self, locals, m); Line:423 +if (errorNumber == WSAECONNRESET) IoSocket_close(self, locals, m);
[~/stevedekorte-io/addons/Socket/source/IPAddress.h] Line:30 -typedef SSIZE_T ssize_t; +//typedef SSIZE_T ssize_t;
[~/stevedekorte-io/addons/Socket/source/Socket.h] Line:30 -typedef SSIZE_T ssize_t; +//typedef SSIZE_T ssize_t;
[~/libevent-1.4.9-stable/evutil.c] Line:73 + Line:74 +WSADATA wsaData; Line:75 +WSAStartup(2, &wsaData); Line:76 + Line:77 =int listener = -1; Line:78 =int connector = -1; ... ... Line:143 +WSACleanup(); Line:144 + Line:145 =return 0; Line:160 +WSACleanup(); Line:161 =return -1;
$ cd ~/libevent-1.4.9-stable $ configure CC=gcc --prefix=c:/msys/1.0/mingw $ make $ make install $ cd ../stevedekorte-io $ make CC=gcc Socket
Socketアドオンのmakeで警告がいくつか出るけど、気にしないで大丈夫だと思う。
とりあえず
Io> aString := URL with("http://www.yahoo.com/") fetch
でドバーっとyahooトップのソースが表示されればオーケーでしょう。
あぁ、長かった。
これでまたio熱が強くなったぞ。
[2009/03/23 追記]
結局何が原因だったかを明記してなかった。
原因はwinsockの初期化をしてなかったので、socket生成が100%失敗していた。
なので上記部分で初期化処理・終了処理を書き加えた。
しかし呼び出し毎にwinsockを初期化してるのってどうなんだろう・・・?
書いてて気になったので調べたら、/addons/Socket/source/Socket.cに
WSAStartup〜WSACleanupしてる所があった。
こりゃまずいかもしれん。