Bug #3433
closed
Error that occurs by BasicSocket#sendmsg
Added by tarui (Masaya Tarui) over 14 years ago.
Updated over 13 years ago.
ruby -v:
ruby 1.9.2dev (2010-06-13 revision 28308) [i386-mswin32_90]
[ruby-dev:41597]
Description
=begin
r24199と関連するのですが、sendmsgが実装されていない場合に発生するエラーとして、
こちらの環境ではNotImplementedErrorではなくErrno::ENOSYSが発生します。
ドキュメントにはエラーについて書いていないのですが、どちらが正解かまた両方ありえるのか、
どうなんでしょうか?
これで、
test_udp_server(TestSocket)
test_sendmsg_nonblock_error(TestSocketNonblock)
がErrorになっています。
=end
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:41597] [Bug #3433] Error that occurs by BasicSocket#sendmsg"
on Sun, 13 Jun 2010 03:06:34 +0900, Masaya Tarui redmine@ruby-lang.org writes:
|r24199と関連するのですが、sendmsgが実装されていない場合に発生するエラーとして、
|こちらの環境ではNotImplementedErrorではなくErrno::ENOSYSが発生します。
CRubyでは、下のレイヤーがエラーを返せばそのまま返します。正直、
sendmsgというシステムコールはあるが、呼ぶと必ずENOSYSを返す変
なプラットフォームが存在した場合、それをドキュメントでカバー
できるかというとかなり疑問です。
|ドキュメントにはエラーについて書いていないのですが、どちらが正解かまた両方ありえるのか、
|どうなんでしょうか?
|
|これで、
|test_udp_server(TestSocket)
|test_sendmsg_nonblock_error(TestSocketNonblock)
|がErrorになっています。
どうすべきなんでしょうね。
- mswin32ではsendmsgは非対応にする。ifdefで外す
- ドキュメントにENOSYSを返すことがあると明記。テストもそれ
にあわせて変更
- sendmsgがENOSYSを返したらNotImplementedErrorを返すように
どれもありえるとは思うのですが。
まつもと ゆきひろ /:|)
=end
=begin
2010年6月13日3:06 Masaya Tarui redmine@ruby-lang.org:
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 を加えると解決しますか?¶
[田中 哲][たなか あきら][Tanaka Akira]
=end
=begin
これで、
test_udp_server(TestSocket)
test_sendmsg_nonblock_error(TestSocketNonblock)
がErrorになっています。
テストで rescue する例外に Errno::ENOSYS を加えると解決しますか?
解決というと曖昧なのでYes/Noで答えられませんが、
現象だけでいうとErrorのかわりにSkipになります。
--
樽家昌也(Masaya TARUI)
No Tool,No Life.
=end
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:41602] Re: [Bug #3433] Error that occurs by BasicSocket#sendmsg"
on Jun.13,2010 23:39:48, akr@fsij.org 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 usa@garbagecollect.jp
=end
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
This issue was solved with changeset r28320.
Masaya, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
=end
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0