From: Tanaka Akira Date: 2003-07-29T15:23:13+09:00 Subject: [ruby-dev:20996] Re: OS/2 EMX (was: ruby 1.8.0 preview5) In article <200307290549.h6T5nI116165@cumail.chiba-u.jp>, siena@faculty.chiba-u.jp (Siena. / SHINAGAWA, Norihide) writes: > (2) ext/socket/socket.c:unix_{send,recv}_io() > > {send,recv}msg() のリンクエラーが発生します。調べたところ、EMX の > sys/socket.h には {send,recv}msg() のプロトタイプ宣言が存在するにも > かかわらず、nm で確認するとなんと実体が socket.a に含まれていません。 > 他の、send(), recv(), sendto(), recvfrom}() は実装が存在します。 > ぐぐってみると、"The UNIX and OS/2 EMX Porting Companion FAQ" > にも > 未実装と書かれていて、現在もそのままのようです。 > > とりあえずの手当として、ext/socket/socket.c:unix_{send,recv}_io() の > 両関数の先頭にある条件文を次のように変更して凌ぎました。 > > -#if defined(HAVE_ST_MSG_CONTROL) || defined(HAVE_ST_MSG_ACCRIGHTS) > +#if ( defined(HAVE_ST_MSG_CONTROL) || defined(HAVE_ST_MSG_ACCRIGHTS) ) && !defined(__EMX__) > > これで、UNIXSocket#{send,recv}_io だけが無効になる (呼び出すと > 例外が上がる?) のだと思いますが、十分なのか理解していません。 > どのくらいのライブラリ/スクリプトが UNIXSocket に、あるいは > UNIXSocket#{send,recv}_io に依存しているのでしょうか? > UNIXSocket を使うほとんどのものが #{send,recv}_io に依存しないならば、 > 上記の変更だけでも (安全ではないけれど) 足りそうですが、そうでなければ > UNIXSocket (と UNIXServer) クラスそのものを無効にすべきかもしれません。 send_io, recv_io を使っているものはほとんど無いと思います。私は使って いる例を聞いたことがありません。 なので、上記の変更でもいいのかも知れませんが、根本原因が sendmsg, recvmsg が存在しないことにあるのならば、そちらを configure で検査した ほうが適切だと思います。 -- [田中 哲][たなか あきら][Tanaka Akira]