Skip to content

Socket on IO

Tomoyuki Sahara edited this page Apr 18, 2014 · 14 revisions

Socket クラスを作っていて思った IO クラスの直したいところ

先に直しておきたいもの

  • File::Constants で値をベタ書きしているのを直す
  • 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 じゃないから必要か?
Clone this wiki locally