http-access.rbのヘビーユーザーです。
同一hostへ連続してrequest_getを送っている時に、0バイトのデータを
get_dataで読み込むと状態遷移がうまくいかず(:DATAのままになってしまう)、
次回のrequest_getの後get_responseで例外 state != :META
(HTTPInvalidState)が発生します。
初回のget_dataで一回目のeof?が成立する場合にも状態遷移させてやらないと
いけないのでしょうか。一応パッチをつけますが、これだと他のデータで二回
eof?時の処理が行われるのでダメっぽいです。どうするのがいいでしょうか?
--- http-access.rb.orig Mon Nov 1 18:02:00 1999
+++ http-access.rb Mon Nov 1 18:04:03 1999
@@ -198,7 +198,15 @@
def get_data(maxbytes=nil, &block)
get_response if @state == :META
- return nil if eof?
+# return nil if eof?
+ if eof?
+ if @next_connection
+ @state = :WAIT
+ else
+ close
+ end
+ return nil
+ end
raise HTTPInvalidState, 'state != DATA' unless @state == :DATA
data = nil
if block