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してる所があった。
こりゃまずいかもしれん。