まつもと ゆきひろです

In message "Re: [ruby-dev:26618] Re: [ruby-cvs] ruby/ext/socket, ruby, ruby: * ext/socket/socket.c (ruby_connect): break immediately if a"
    on Thu, 28 Jul 2005 11:31:01 +0900, Tanaka Akira <akr / m17n.org> writes:

|>     * ext/socket/socket.c (ruby_connect): break immediately if a
|>       socket is non-blocking.  [ruby-talk:111654]
|
|こういうように、nonblocking かどうかで挙動を変えるのは、socket をデフォ
|ルトで nonblocking にしようとしたときに非互換の原因になるのであまりよ
|くないんじゃないか、と思っています。

ふーむ、ここで初めて気がついたのですが(遅い)、デフォルトで
nonblockingにするということは、IOをnonblockingに設定しても各
メソッドはブロックする(かもしれない)ことを意味するんですね。
すでにあちこちそうなっていて文句も出てないということは気にし
なくても良いということなのかもしれませんが。

|また、Windows では F_GETFL がなくて、メソッドが呼ばれる前に
|nonblocking になっていたかどうかはわからないという話ですし。
|
|connect_nonblock とか新しいメソッドを作ったほうがいいんじゃないでしょ
|うか。そのメソッドの中で nonblocking にすることにすれば使う方としても
|fcntl を使わないでいいぶん簡単ですし、デフォルトで nonblocking にして
|も挙動が変化しないですし、F_GETFL も必要なくなりますし。
|
|名前が気に入らないかもしれませんが。

気に入りません。最悪というほどではないですが。
なにか良い名前がありませんかねえ。

あらゆるIOオペレーションをブロックせずに行いたいというニーズ
が本当にあるのであれば、OpenFile構造体のフラグとして追加する
(FMODE_BINMODEのように)という手もありますが、そこまでする必
要もないような気もします。

                                まつもと ゆきひろ /:|)