Project

General

Profile

Bug #3433

Error that occurs by BasicSocket#sendmsg

Added by tarui (Masaya Tarui) over 10 years ago. Updated over 9 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
ruby -v:
ruby 1.9.2dev (2010-06-13 revision 28308) [i386-mswin32_90]
Backport:
[ruby-dev:41597]

Description

=begin
r24199と関連するのですが、sendmsgが実装されていない場合に発生するエラーとして、
こちらの環境ではNotImplementedErrorではなくErrno::ENOSYSが発生します。

ドキュメントにはエラーについて書いていないのですが、どちらが正解かまた両方ありえるのか、
どうなんでしょうか?

これで、
test_udp_server(TestSocket)
test_sendmsg_nonblock_error(TestSocketNonblock)
がErrorになっています。
=end

#1

Updated by matz (Yukihiro Matsumoto) over 10 years ago

=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

#2

Updated by akr (Akira Tanaka) over 10 years ago

=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

#3

Updated by tarui (Masaya Tarui) over 10 years ago

=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

#4

Updated by usa (Usaku NAKAMURA) over 10 years ago

=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

#5

Updated by akr (Akira Tanaka) over 10 years ago

  • 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