Tokyo TyrantをSolaris10で使えるようにする 実装編その1

# TokyoとTyrant(Cabinet)の間はスペース入れるのが推奨みたいです(´・д・`)

それはさておき、

とりあえず動きましたヽ( `・ω・´)ノ

/dev/pollのサンプルが全然なかったので、Sunのページとlibeventを参考にしました。
(sun) http://docs.sun.com/app/docs/doc/816-5177/poll-7d?l=pt_br&a=view
(libevent) http://monkey.org/~provos/libevent/
(libev) http://software.schmorp.de/pkg/libev.html

今更だけどlibevも見れば良かった・・。
簡単なechoサーバのサンプルがあると嬉しかったのですが、見つけられなかった。゚(゚´Д`゚)゚。

とりあえず環境的なところで詰まったのは、/usr/ccs/bin/ldだと-soname指定が上手く動かない事。--with-ldとか指定してもダメだったので、とりあえず以下のページを参考にして/usr/local/bin/ldにシンボリックリンクを張りました。
http://www.rinneza.com/junya/tech/solaris10_x86/network/samba_3.2.4.html

あとはTokyo Cabinet同様にconfigure中のstd=c99をstd=gnu99に変更。

今後やることは、

今は最初に確保した配列を全部/dev/pollのハンドラに書き込んでいるので、これを必要な分だけ登録する。(配列[fd].xxxxって処理してるのを0,1,2,と使うように変更する。)
でもどっちが良いのかな・・。 ゥ─σ(・´ω・`*)─ン…

あとは↑の配列の確保をcallocで処理しているので、終了時にメモリ解放のコードを入れてあげる。
(終了時だから解放しなくても良いものなのかな・・? ってダメだよね・・ (´・д・`))

なんでcalloc使っているかと言うと、以下のようなコードで配列の添え字を求めているからです。

  int nfiles = 32000;
  struct rlimit rl;
  if (getrlimit(RLIMIT_NOFILE, &rl) == 0 &&
      rl.rlim_cur != RLIM_INFINITY)
    nfiles = rl.rlim_cur;

もうちょっと負荷かけたりスレッド周りの検証したらコードも公開します。
追加したコードはfprintfのデバッグコードも含めて100行くらいでした。

 

追記 2009/1/25 23:00

複数接続でIOがブロックされちゃうのと、切断時に何回もCLOSEを試みて↓のエラーが数秒出続けてしまう。その間は新規接続も受け付けてくれない・・。
2009-01-25T23:24:24+09:00       close failed
2009-01-25T23:24:24+09:00       connection finished
・・・

 

新しいサイトもよろしくお願いします!