NetBSD 2.0 で WEBrick を使って HTTP サーバを動かした場合、クライアント
がリクエストした後データを受け取らないことにより、サーバプロセス全体を
ブロックさせてしまうことができるようです。

| server% cd sample/webrick 
| server% ../../ruby -e 'print "a" * 100000' > z

100000bytes のファイルを作ります。

| server% ../../ruby httpd.rb
| [2005-06-30 00:51:50] INFO  WEBrick 1.3.1
| [2005-06-30 00:51:50] INFO  ruby 1.9.0 (2005-06-28) [i386-netbsdelf2.0]
| [2005-06-30 00:51:50] DEBUG TCPServer.new(::, 10080)
| [2005-06-30 00:51:50] DEBUG TCPServer.new(0.0.0.0, 10080)
| [2005-06-30 00:51:50] DEBUG WEBrick::HTTPServlet::FileHandler is mounted on /.
| [2005-06-30 00:51:50] DEBUG HelloServlet is mounted on /hello.
| [2005-06-30 00:51:50] DEBUG DemoServlet is mounted on /urlencoded.
| [2005-06-30 00:51:50] DEBUG DemoServlet is mounted on /multipart.
| [2005-06-30 00:51:50] INFO  WEBrick::HTTPServer#start: pid=3354 port=10080

sample/webrick/httpd.rb を起動します。

| client% ./ruby -rsocket -e 'TCPSocket.open("localhost", 10080) {|s|
| s.print "GET /z HTTP/1.0\r\n\r\n"
| sleep
| }'

他の window から z をリクエストしてデータを受け取らないクライアントを動かします。

| [2005-06-30 00:52:09] DEBUG accept: ::1:57998
| [2005-06-30 00:52:09] DEBUG WEBrick::HTTPServlet::FileHandler is invoked.

するとサーバは上の 2行を出力します。

| client2% telnet localhost 10080 
| Trying ::1...
| Connected to localhost.
| Escape character is '^]'.
| GET / HTTP/1.0
| 
| 

ここでさらに他の window からリクエストを送っても反応しません。

まぁ、よーするに write でブロックしてるわけですが...
-- 
[田中 哲][たなか あきら][Tanaka Akira]