[#41778] [Bug #3515] FreeBSD wrongly raises ECONNRESET on close(2) — Yui NARUSE <redmine@...>

Bug #3515: FreeBSD wrongly raises ECONNRESET on close(2)

12 messages 2010/07/02

[ruby-dev:41787] Re: [Feature #3513] spawn ..., err: nil

From: Urabe Shyouhei <shyouhei@...>
Date: 2010-07-02 13:51:52 UTC
List: ruby-dev #41787
(2010/07/02 22:31), Tanaka Akira wrote:
>> 私の主張は:closeの位置にnilも受け付けて欲しいというだけですので、stderrを閉じ
>> ることの是非とは独立した話のはずです。
> 
> いいえ。
> 
> nil を close の意味にすることは close することを使いやすくします。
> それはおすすめしないという意図を弱めます。
> 
> そもそも、:close によって今でも可能なのですから、可能・不可能という点では
> 現状でも問題ないはずです。
> したがって、この話は close することを使いやすくしようという提案だと解釈して
> います。
> そして、私は使いやすくすることに対して反対しているのです。
> 
> 解釈を間違っていますか?
> もし間違っているとしたら、なぜこの提案をしたんですか?

なるほど。使いやすくすることに反対しておられるのですか。つまり(現在のところ)
nilを受付ないのは作り込みが足りないからではなく、積極的に機能を削った状態なの
ですね?

であればnilを指定できたほうがよい積極的な理由を探して来いというのは理解できます。

>>> では適切な方法は、というと、err:"/dev/null" などとリダイレクトすることです。
>>> (Unix では)
>>
>> それは移植性がありません。せっかくspawn使ってるのに。
>>
>> さらに背景を説明すると、くだんのスクリプトが動く環境には/dev/nullがありませ
>> ん。Linuxですがキャラクタデバイスへのアクセスが(cgroupで)禁止されています。
> 
> えぇ、残念なことに移植性が無いのは分かっています。
> 
> 次に考えられる方法は、パイプを新しく作って読み込み側を stderr に割り当てる
> ことですかね。
> 書き込み側はすぐ close して。

ちょっと/dev/nullがないというのは特殊すぎるので忘れてもらって構わないのです
が、いずれにせよ「stderrを黙らせたい」というのはわりとありがちな要求であるはず
なので、なんらかの支援機構は欲しいです。たとえばWindowsにもNULデバイスがあるら
しいので、なんらかのそういうデバイスを(configureなどで)検出して使うとか。

In This Thread