なひです.

> From: TAKAHASHI Masayoshi [mailto:maki / inac.co.jp]
> Sent: Sunday, June 06, 1999 12:13 AM

> > > ・やっぱ並行でエージェントとばしたい。
> > > (結構時間がかかる。遅い時だと現在49ドメインで3分くらいかかったりする。
> > >  HEADリクエストだけなのに)
> > 
> > ネットワークへの負荷を考えると,どのくらい平行に動かすのが
> > 最適なのかは,悩みどころですよね.
> 
> うーん、HEADだけしか飛ばさないのと、プロセスは1個ですませる
> ということなので、ばしばし並行させたい、という欲望はあるの
> ですが(^^;

なるほど.ネットワークや稼動ホストへの負荷よりも,
一回の実行時間の短さの方が重要であるような用途,
ということなんですね.

> > > 最初はhttp-accessを使ってみたのですが、どうもコネクションを張った
> > > ままrequestするのがうまくいきませんでした(毎回closeしてopenしなおせば
> > > OKでした)。

> これ、いろいろいじったら、原因がすこし分かりました。
> HTTP/1.0なサーバに対して失敗するようです。
> 
> http-accessでは、request_head などを実行すると、@statusが
> INITであればあらためてconnectするのですが、今のところ
> closeしなければINITになりません。
> 
> なので、request_headを何度か送ろうとすると、一度目はいいんですが、
> 二度目はconnectをやり直しません。HTTP/1.1対応のサーバに対しては
> それで構わないのですが、HTTP/1.0のサーバはKeep-Aliveできないので、
> 失敗してしまいます。どうしたものか。

なるほど,そういうことなんですね.
ソケットの読み出し処理が終了した時点でcloseを呼べばよさそうだけど...

get_responseの中じゃまずいので...
どっか(request)でMETHOD(HEAD/GET)を覚えておいて,
get_header/get_bodyの最後で,
@next_connectionがfalseならclose.

で,どうでしょうか.べたべたでかっこわるいかも.^^;
テスト環境がない(未だにHTTP/1.0のサイトってどこだろう ^^;)ので,
patchは出し(せ)ません.

あと前橋さん.url-parse.rbのほうで,
foo.bar:8080なんてのにも対応してあると嬉しいかもしれません.
さらにさらに.世の中にはResponse Header区切りが「\nだけ」なんて
サーバもありますので,CRLF決め打ちだとハマるかも.
ただしこれは,サーバの方が悪いので,
コメントに「そんなサーバ知らないよ」と書いとくだけでいいと思います.

# なひはハマりました.^^;