ruby-1.6.2-i586-beos-socket-diff

□パッチについて

  BeOS 4.5 (Intel) 以降で、Ruby 1.6.2のsocket.soを動作させるための
  パッチです。

  パッチは、BeOS R4.5.2 x86 CD-ROMのglibc-src.tgzからコピーした
  以下の2つのglibcの内部ヘッダファイルを含んでいます。

    libroot/src/kit/glibc/libio/iolibio.h
    libroot/src/kit/glibc/libio/libioP.h

  また、このパッチにはlibsocket-1.2.tar.gzのlibsocket.hとlibsocket.cに
  修正を加えたバージョンが含まれています。

  libsocket-1.2.tar.gzの配布元は以下です。

    http://www.naan.net/

  Geek Gadgets source repositoryのcvsweb経由で最新版をブラウズすることが
  できます。

    http://www.geekgadgets.org/cgi-bin/cvsweb.cgi/gg/be/libsocket/

□サポートプラットフォーム

  R4.5またはそれ以降のIntel版BeOS。

□パッチのインストール

  パッチは以下のようにして適用してください。

    tar xzf ファイルを置いたパス/ruby-1.6.2.tar.gz
    cd ruby-1.6.2
    patch -p1 < ファイルを置いたパス/ruby-1.6.2-i586-beos-socket-diff
    autoconf

  このパッチは、configure.inを変更するため2.13またはそれ以降のautoconfが
  必要です。

  ruby-1.6.2.tar.gzはRuby Home Pageから入手できます。

    http://www.ruby-lang.org/

  autoconfのパッケージautoconf-2.13-bin.tgzは、Geek Gadgetsから入手する
  ことができます。

    http://www.geekgadgets.org/

  autoconf-2.13-bin.tgzは以下にあります。

    ftp://ftp.geekgadgets.org/pub/geekgadgets/be/i586/snapshots/current/bin/autoconf-2.13-bin.tgz

    http://mirror.nucba.ac.jp/mirror/geekgadgets/be/i586/snapshots/current/bin/autoconf-2.13-bin.tgz

□Rubyのインストール

  Ruby 1.6.0から、ダイナミックリンク版とスタティックリンク版をサポート
  するようになりました。
  Ruby 1.4ではダイナミックリンク版のみがサポートされていました。

  ダイナミックリンク版:
    o configureで--enable-sharedをつけて作成します。
    o 拡張ライブラリをダイナミックにロードすることができます。
    o extの下の拡張ライブラリをスタティックリンクしても動作しません。

  スタティックリンク版:
    o configureで--enable-sharedを指定しない場合に作成されます。
    o 拡張ライブラリをダイナミックにロードすることができません。
    o extの下の拡張ライブラリをスタティックリンクできます。
      なお、configureで--with-static-linked-extを指定するとextの下の
      全ての拡張ライブラリがスタティックリンクできます。

  通常は、拡張ライブラリを使えるダイナミックリンク版を作成します。

  Rubyを/boot/home/configにインストールする場合、以下のコマンドを
  実行します。

    ./configure --prefix=/boot/home/config --enable-shared
    make
    make test
    make install

  Ruby 1.6.2のデフォルトの$KCODEはnoneですが、たとえばこれをutf8に
  変更したい場合にはconfigureに--with-default-kcode=eucを指定して
  ください。

    ./configure --prefix=/boot/home/config --enable-shared \
        --with-default-kcode=utf8
    make
    make test
    make install

  また、コマンドをruby-1.6.2のようにしたい場合には、
  --program-suffix=-1.6.2を指定してください。

    ./configure --prefix=/boot/home/config --enable-shared \
        --program-suffix=-1.6.2
    make
    make test
    make install

  スタティックリンク版を作成したい場合には、次のように指定してください。

    ./configure --prefix=/boot/home/config --with-static-linked-ext
    make
    make test
    make install

□既知の問題点

  o socket関係の操作をしているときにCtrl-Cで止めようとしてもRubyが
    止まらない。

    closesocket()を呼んだときに/boot/beos/system/lib/libroot.soの
    中で止まっているのですが、何が悪いのかさっぱりわかりません。

    例)
      $ ruby sample/tsvr.rb
      server is on 49153                      <- ここでCtrl-Cを押す
      tsvr.rb:13:in `accept': Interrupt       <- closesocket()でハング

  o Errno::EPIPEの代わりにErrno::ERROR (= B_ERROR (-1), General OS error)
    が上がってくる。

  o ソケットディスクリプタ以外は常に読み書きできるとみなすという
    実装 (mswin32版と同じ方式です) のため、デバイスを待つといった
    使い方はたぶんできない。

    libsocketのfdopen()に関する制限のため、Rubyに組み込んだ
    バージョンでは、ソケット1個に対して/dev/nullを1個オープンして
    ソケットディスクリプタ用のスロットを確保するという部分を生かし、
    ファイルディスクリプタとソケットディスクリプタをthreadを使って
    同時に待つという部分は取り除いてしまいました。

  o ポート番号を指定せずにサーバーポートを作ったときloopbackと
    実interfaceで違うポート番号が割り当てられることがある。

□その他のパッチ

  このパッチには以下のパッチもマージしてあります。

  [ruby-ext:00875]
    * gc.c (rb_gc): get stack information using get_thread_info().
      http://www.m-net.ne.jp/~ymsd/ruby/btk/index.html
      http://www.m-net.ne.jp/~ymsd/ruby/btk/btk_001.zip

□更新履歴

  2000-12-27
    Ruby 1.6.2 (2000-12-25) version.

    Status:
      Same as 2000-09-27 release.

    Development platform:
      BeOS R5.0.3(Intel)

    File:
      ruby-1.6.2-i586-beos-socket.zip

  2000-09-27
    Ruby 1.6.1 (2000-09-27) version.
    Merge [ruby-talk:5152].

    Status:
      OK sample/dualstack*.rb
      OK sample/{clnt.rb,svr.rb,tsvr.rb}
      OK [ruby-list:15168]
      OK [ruby-list:15174]
      OK [ruby-list:16659]
      OK sample/httpget.rb in Net library.

    Development platform:
      BeOS R5.0.3(Intel)

    File:
      ruby-1.6.1-i586-beos-socket.zip

  2000-09-19
    Ruby 1.6.0 (2000-09-19) version.

    Status:
      NG sample/dualstack*.rb (Also, doesn't work on linux etc.)
      OK sample/{clnt.rb,svr.rb,tsvr.rb}
      OK [ruby-list:15168]
      OK [ruby-list:15174]
      OK [ruby-list:16659]
      OK sample/httpget.rb in Net library.

    Development platform:
      BeOS R5.0.3(Intel)

    File:
      ruby-1.6.0-i586-beos-socket.zip

  2000-09-08
    Ruby 1.6.0 (2000-09-07) version.

    Status:
      Same as 2000-04-18 release.

    Development platform:
      BeOS R5.0.3(Intel)

    File:
      ruby-1.6.0-i586-beos-socket.zip

  2000-08-16 (Not Released)
    Ruby 1.4.6 (2000-08-16) version.

    Status:
      Same as 2000-04-18 release.

    Development platform:
      BeOS R5.0.3(Intel)

    File:
      ruby-1.4.6-i586-beos-socket.zip

  2000-06-26
    Ruby 1.4.5 (2000-06-26) version.

    Status:
      Same as 2000-04-18 release.

    Development platform:
      BeOS R5.0.1(Intel)

    File:
      ruby-1.4.5-i586-beos-socket.zip

  2000-04-24
    Merge ruby-bugs/1.4.4?id=1.
    Merge [ruby-dev:9600].
    Merge latest libsocket changes.
    Merge gc.c change from GUI extension for BeOS "Btk".

    Status:
      Same as 2000-04-18 release.

    Development platform:
      BeOS R5(Intel)

    File:
      ruby-1.4.4-i586-beos-socket.zip

  2000-04-18
    [ruby-list:21978]
    Patch for Ruby 1.4.4.
    Merge libsocket.

    Status:
      OK sample/dualstack*.rb
      OK sample/{clnt.rb,svr.rb,tsvr.rb}
      OK [ruby-list:15168]
      OK [ruby-list:15174]
      OK [ruby-list:16659]
      OK sample/httpget.rb in Net library.

    Development Platform:
      BeOS R5(Intel)

    File:
      ruby-1.4.4-i586-beos-socket-diff.gz

  1999-10-25
    [ruby-list:17979]
    Patch for Ruby 1.4.2 (Experimental).

    Status:
      Same as 1999-10-20 release.

    Development Platform:
      BeOS R4.5.2(Intel)

    File:
      ruby-1.4.2-i586-beos-r4-socksrc.zip
      ruby-1.4.2-i586-beos-r4-socket.zip

  1999-10-20
    [ruby-dev:8066]
    Patch for ruby_1_4 branch in CVS (Experimental).

    Status:
      OK sample/dualstack*.rb
      OK sample/{clnt.rb,svr.rb,tsvr.rb}
      NG [ruby-list:15168]
      NG [ruby-list:15174]
      OK [ruby-list:16659]
      NG sample/httpget.rb in Net library.

    Development Platform:
      BeOS R4.5.2(Intel)

    File:
      ruby-1.4.3-socket-beos-4.5.2I-diff.gz

--
小松克行 / Katsuyuki Komatsu <komatsu@sarion.co.jp>
