forked from mruby/mruby
-
Notifications
You must be signed in to change notification settings - Fork 4
Socket on IO
Tomoyuki Sahara edited this page Apr 18, 2014
·
14 revisions
Socket クラスを作っていて思った IO クラスの直したいところ
- File::Constants で値をベタ書きしているのを直す
- http://doc.ruby-lang.org/ja/2.0.0/class/File=3a=3aConstants.html
- LOCK_* は直した
- open の引数の RDONLY 等は... LOCK_ 同様 C から作る。
- fptr, DATA_hoge の初期化が何箇所かに見えるのをまとめる
- mrb_io_init
- mrb_io_bless
- mrb_io_s_for_fd
- mrb_io_free から呼ばれる fptr_finalize で例外を上げて良いのかの確認。
GC から呼ばれているタイミングでそんな複雑な処理をしてはいけないのではないか?
- たぶん良い。ダメなケースがあったら、たぶんそちらを直すべき。
- と思ったけど、実装上は直すべきだろうが、セマンティクス的にダメな気がする。GC はいつ起きるかわからない。 そんなコンテキストでいきなり例外上げられても困るのでは?
- ファイルの close(2) はあまり失敗しないが、socket の close(2) は失敗しやすい。
- たぶん良い。ダメなケースがあったら、たぶんそちらを直すべき。
- IO.new の引数であるところの mode を後から得る手段が無い?
- IO#initialize の中で mode という名前で String を作っているが iv に設定されることなく消えている???
- fptr->pid は iv にできないか?
- NOFILE は危険。あれば closefrom() を使うなりしたい。
- が、configure が必要か...
- file.c は NUL 文字対策の見直しが必要そう。ぱっと見で、mrb_file_size は大丈夫?
- include/.../io.h 消せるのでは?
- FMODE_READABLE とかは消す... pipe の片側とかは readable じゃないから必要か?