かしこさが10上がった じょうぶさが50あがった

結局、またダウンロード・アップロード機能は作らなかったのですが、全体的に作り直して、検索とクラスタリング能力だけならWinnyと同等くらいになった気がします。(親バカ。15KB/Sの環境だけじゃなんともいえないけど・・)
作り直しというのは本当に作り直しで、ライブラリ(ソースでいうpes配下)以外はだいたい作り直しました。
結果的に、検索能力が10倍以上(前は10分起動しておいてキーが300個くらいだったのが、今は5000個以上集まってる)上昇して、落ちたりが少なくなりました。

検索能力10倍というとすごいいろいろがんばったような印象ですが、実際は作り直しているときにバグを見つけやすいようにデバッグプリントを沢山入れておいたら、ちょう巨大なバグを見つけて、そこを直しただけだったり。

ちなみにそのバグとは次のようなもの。

  • コネクションの受信タイムアウトが短すぎて(10msecにしてた)、コマンドを中途半端に受信して、それを捨てるので、次から復号エラーとなり自ら回線を切断していた。

はは。ちょうつまらん。
前々から、上流検索リンクから切断される頻度が高いなーと思っていて、接続するノードの選択についてものすごく深く考えたりしていたんだけど、実は復号エラーでこっちから切断していたというおろかさ。
これを直したとたん、ぐーんとよくなりました。
(気づかなかったのは、ローカルのWinnyに繋いだ場合はタイムアウトが短くても全部受信できちゃうから)

あとは、ポエニー同士でもうまくやっていけるように調節するのと、あるタイミングで連想配列の__aaRehash_xが勝手に実行されて、途中でhlt呼んでPrivileged instructionとかいう例外が飛んでこなくなったら、検索周りは終了かなーと。
(これマジで困ってる・・)