open-network-stream() ってなんでこんなにとろいのかなーと思っていたら、Zaurus の Emacs だけに get-ipaddr という advice がかかっていたことに気がついた。 モバイル環境だと、 /etc/resolve.conf がよく書きかえられるために名前解決ができなくなるらしい。この advice は、それに対処するためのものだったようだ。(MOEPANDA diary(2004-10-16)参照)
ところで、ぼくは KWINS を使っているのだけど、ネットワークを切ってもつなぎ直しても /etc/resolve.conf は書きかわらなかったし、 advice を切っても再度ネットワークをつなぎ直しても全く変わらずに動いた。
この advice は nslookup を呼んで名前解決をしてる(しかもキャッシュなし)ので遅いのだ。 navi2ch のブックマークの更新チェックのように連続で通信するものだと差が顕著に現われると思う。 Zaurus で Emacs を使っていて /etc/resolve.conf が変わってなさそうな人は切っといたほうがいいだろう。
というわけで、
(ad-disable-advice 'open-network-stream 'around 'get-ipaddr)
(ad-activate 'open-network-stream)
と .emacs に書くことにした。
/etc/resolve.conf が変わってしまう人も、 hash でも使って 結果を cache するようにすれば多少速くなるかもしれない。