助田です.
In [ruby-dev:6949] socket for rubymw

>小田@QNES です。

>以下のパッチでgetsockopt のエラーは解消したのですが、
>win32.c の myfdopen で作るfilepointer がどうもマズイようです。
>io.c で getc する際に EBADF (errno=8) で返ってきます。

>myfdopen を _fdopen にすると例外します。

>どちらも、SOCKET ハンドルを fd として使おうとしているのが
>問題のようです。
確か,内部で,GetFileType が実行されて SOCKET は fd ではないと
判断されるため,SOCKET をfd として扱おうとすると絶対に失敗します.
(_get_osfhandle だったと思います)

過去に Perl のソースを調べたときには,この判断の処理を実行しない
ようにその周辺部分を自前で実装していました.
参考になると思います.

実は,Perl のソースを元に Ruby 1.1b4 ぐらいである程度動くようには
したのですが,その後ほったらかしです.すいません.m(_ _)m

後,95 と NT でも違いがあって処理を変える必要がありました.

古すぎて参考にならないかも知れませんが,
Ruby 1.1b4 へのパッチを直接メールしましょうか?>小田さん
(古すぎるので ruby-dev には流しません.)

--------------------------------------------
助田雅紀(masaki.suketa / systemplaza.co.jp)
--------------------------------------------