Webricks logging may cause it to fail on a valid http requests (on Mac 
OS X).

$ hostname
rodin
$ ping rodin.local.
PING rodin.local (192.168.240.121): 56 data bytes
64 bytes from 192.168.240.121: icmp_seq=0 ttl=64 time=0.121 ms
64 bytes from 192.168.240.121: icmp_seq=1 ttl=64 time=0.137 ms
...

I wanted to show off ruby, dnssd, and webrick using Safari with this 
script
##########
require 'dnssd'
require 'webrick'
include WEBrick

s = HTTPServer.new(
   :Port           => 8080,
   :DocumentRoot   => Dir::pwd
)

dnssd_s = DNSSD.register("RACC\032Presentation", "_http._tcp", nil, 
8080) do |r|
   warn("DNSSD Successfully Registered: #{r.inspect}")
end

trap("INT"){ dnssd_s.stop; s.shutdown }
s.start
###########

Webrick doesn't respond to the request 'http://rodin.local.:8080/' as 
it should.

$ ruby -rubygems webserver.rb
[2004-12-13 20:26:59] INFO  WEBrick 1.3.1
[2004-12-13 20:26:59] INFO  ruby 1.8.1 (2003-12-25) [powerpc-darwin]
[2004-12-13 20:26:59] INFO  WEBrick::HTTPServer#start: pid=5716 
port=8080
DNSSD Successfully Registered: #<DNSSD::RegisterReply 
RACC\026Presentation._http._tcp.local.>
[2004-12-13 20:27:40] ERROR SocketError: getnameinfo: nodename nor 
servname provided, or not known
         /usr/local/lib/ruby/1.8/webrick/server.rb:147:in `peeraddr'
         /usr/local/lib/ruby/1.8/webrick/server.rb:147:in `start_thread'
         /usr/local/lib/ruby/1.8/webrick/server.rb:144:in `start'
         /usr/local/lib/ruby/1.8/webrick/server.rb:144:in `start_thread'
         /usr/local/lib/ruby/1.8/webrick/server.rb:94:in `start'
         /usr/local/lib/ruby/1.8/webrick/server.rb:89:in `each'
         /usr/local/lib/ruby/1.8/webrick/server.rb:89:in `start'
         /usr/local/lib/ruby/1.8/webrick/server.rb:79:in `start'
         /usr/local/lib/ruby/1.8/webrick/server.rb:79:in `start'
         webserver.rb:17

------------------------------------------------------------
Here is a patch against the 1.8.1 source (problem exists with latest 
source too):

server.rb
147,155c147,150
<           begin
<             addr = sock.peeraddr
<             @logger.debug "accept: #{addr[3]}:#{addr[1]}"
<           rescue SocketError
<             @logger.debug "accept: <address unknown>"
<           ensure
<             call_callback(:AcceptCallback, sock)
<             block ? block.call(sock) : run(sock)
<           end
---
 >           addr = sock.peeraddr
 >           @logger.debug "accept: #{addr[3]}:#{addr[1]}"
 >           call_callback(:AcceptCallback, sock)
 >           block ? block.call(sock) : run(sock)

httprequest.rb
76,78d75
<       rescue SocketError
<         @peeraddr ||= []
<         @addr ||= []

Is this patch ok?

-Charlie