[ruby-list:47739] TCPServerクラスではacceptしたオブジェクトに対してgetsする必要はあるか?

From: Wei Yuan <weiy1005@...>
Date: 2011-01-07 13:16:53 UTC
List: ruby-list #47739
はじめまして、魏と申します。

現在TCPServerを使った簡単なWEBServerを作っています。

うまくいかなかった箇所は、
サーバーからresponseを返す時に、HTTPのヘッダーとボディーを分けて出力しても、ヘッダーしかブラウザで認識できない問題です。
		cl.print "HTTP/1.1 200/OK\r\nContent-type:text/html\r\n\r\n"
		cl.write("<html><body><h1>vvvvvvvvvvvvvvvv</h1></body></html>")	

一方
ヘッダーとボディーの間にgetsメソッドを呼ぶと、ブラウザでは正確に表示されます。
		cl.print "HTTP/1.1 200/OK\r\nContent-type:text/html\r\n\r\n"
		cl.gets
		cl.write("<html><body><h1>vvvvvvvvvvvvvvvv</h1></body></html>")	

getsを使わなくても、responseできると思ったのですが原因がわかりません。
よろしくお願いします。
(getsを使わない場合でもtelnetで見ると、ちゃんとボディーはクライアントに届いています。)


■ソースコード
----------------------------------------------------------------------
#!/usr/bin/env ruby
require 'socket'
s = TCPServer.new(8000)
loop {
cl = s.accept
	Thread.start {
		cl.print "HTTP/1.1 200/OK\r\nContent-type:text/html\r\n\r\n"
		cl.gets
		cl.write("<html><body><h1>vvvvvvvvvvvvvvvv</h1></body></html>")	
		cl.close
		}
}

In This Thread

Prev Next