From: "U.Nakamura" Date: 2010-06-14T09:55:01+09:00 Subject: [ruby-dev:41605] Re: [Bug #3433] Error that occurs by BasicSocket#sendmsg こんにちは、なかむら(う)です。 In message "[ruby-dev:41602] Re: [Bug #3433] Error that occurs by BasicSocket#sendmsg" on Jun.13,2010 23:39:48, wrote: > > r24199と関連するのですが、sendmsgが実装されていない場合に発生するエラーとして、 > > こちらの環境ではNotImplementedErrorではなくErrno::ENOSYSが発生します。 > > Windows 上の ruby における sendmsg の実装をよく分かっていないのですが、 > コンパイルした環境から他の環境にバイナリをコピーすると動いたり動かなかったり > することはあるでしょうか。 はい。 > Unix では、カーネルがシステムコールをサポートしていれば動くし、 > サポートしていなければ動かない (ENOSYS) ので、そういうことがあり得ます。 > > もし Windows でもそうなら、少なくとも #ifdef でコンパイル時に挙動を > 決めてしまうのはよろしくないでしょう。 完全に同意します。 > > ドキュメントにはエラーについて書いていないのですが、どちらが正解かまた両方ありえるのか、 > > どうなんでしょうか? > > さて。 > > > これで、 > > test_udp_server(TestSocket) > > test_sendmsg_nonblock_error(TestSocketNonblock) > > がErrorになっています。 > > テストで rescue する例外に Errno::ENOSYS を加えると解決しますか? 1.9.2に関してはそれでいいと思います。 将来的には、ENOSYSなんぞは外に見せないでNotImplementedErrorに 変える方が親切なんじゃないかと思っているのですが、それはまた 別の機会に。 それでは。 -- U.Nakamura