From: Mike Dvorkin Date: 2006-09-23T08:41:14+09:00 Subject: Re: XP: "An existing connection was forcibly closed" ECONNRESET Dima, You're connecting to the server using HTTP, so the server should return valid HTTP header, i.e.: class TimeServer < GServer def initialize(port=10001, *args) super(port, *args) end def serve(io) str = "HTTP/1.0 200 OK\r\n\r\n#{Time.now.to_i}" puts str io.puts(str) end end Haven't tried it on Windows, but this works on Mac whereas your version fails as you described. Best, Mike Dvorkin http://www.rubywizards.com On Sep 22, 2006, at 3:01 PM, Dmitri Kondratiev wrote: > Hello, > I am running Ruby 1-185-21 on Win XP without any proxy enabled. > When trying to connect to HTTP server (both server and client are my > Ruby scripts) at *localhost* I get this error: > " > c:/usr/ruby/lib/ruby/1.8/net/protocol.rb:133:in `sysread': An existing > connection was forcibly closed by the remote host. (Errno::ECONNRESET) > " > > Interesting facts: > 1) Firefox works without any problems with my Ruby server!!! > 2) IE doesn't work with my Ruby server!!! > 3) My client works fine with all other HTTP servers on the Internet, > except for my Ruby server on localhost :( > > (see bellow complete trace of this error and source of my simple > server > and client) > > Any ideas? > Thanks, > Dima >
> === localhost error trace:
>
> ruby test-serv.rb localhost 10001
> [Sat Sep 23 01:22:16 2006] TimeServer 127.0.0.1:10001 start
> Server started...
> Connecting to server localhost:10001 at Sat Sep 23 01:22:21 +0400 2006
> [Sat Sep 23 01:22:21 2006] TimeServer 127.0.0.1:10001 client:1203
> localhost<127.0.0.1> connect
> [Sat Sep 23 01:22:21 2006] TimeServer 127.0.0.1:10001 client:1203
> disconnect
> [Sat Sep 23 01:22:21 2006] TimeServer 127.0.0.1:10001 stop
> c:/usr/ruby/lib/ruby/1.8/net/protocol.rb:133:in `sysread': An existing
> connection was forcibly closed by the remote host. (Errno::ECONNRESET)
>         from c:/usr/ruby/lib/ruby/1.8/net/protocol.rb:133:in  
> `rbuf_fill'
>         from c:/usr/ruby/lib/ruby/1.8/timeout.rb:56:in `timeout'
>         from c:/usr/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout'
>         from c:/usr/ruby/lib/ruby/1.8/net/protocol.rb:132:in  
> `rbuf_fill'
>         from c:/usr/ruby/lib/ruby/1.8/net/protocol.rb:116:in  
> `readuntil'
>         from c:/usr/ruby/lib/ruby/1.8/net/protocol.rb:126:in  
> `readline'
>         from c:/usr/ruby/lib/ruby/1.8/net/http.rb:2017:in
> `read_status_line'
>         from c:/usr/ruby/lib/ruby/1.8/net/http.rb:2006:in `read_new'
>         from c:/usr/ruby/lib/ruby/1.8/net/http.rb:1047:in `request'
>         from c:/usr/ruby/lib/ruby/1.8/net/http.rb:1034:in `request'
>         from c:/usr/ruby/lib/ruby/1.8/net/http.rb:543:in `start'
>         from c:/usr/ruby/lib/ruby/1.8/net/http.rb:1032:in `request'
>         from c:/usr/ruby/lib/ruby/1.8/net/http.rb:769:in `get'
>         from test-serv.rb:35
>
> === no error trace:
>
> C:\wks\ruby-wks>ruby test-serv.rb www.rubycentral.com 80
> Connecting to server www.rubycentral.com:80 at Sat Sep 23 01:29:28  
> +0400
> 2006
> Code: 200 Msg: OK
> Connecting to server www.rubycentral.com:80 at Sat Sep 23 01:29:34  
> +0400
> 2006
> Code: 200 Msg: OK
>
> === source:
> require 'gserver'
> require 'net/http'
>
>   TIME_OUT  = 5
>   host      = ARGV[0]
>   port      = ARGV[1]
>
>
>   if host == 'localhost' then
>   #
>   # A server that returns the time in seconds since 1970.
>   #
>
>     class TimeServer < GServer
>       def initialize(port=10001, *args)
>         super(port, *args)
>       end
>       def serve(io)
>         io.puts(Time.now.to_i)
>       end
>     end
>
>     # Run the server with logging enabled (it's a separate thread).
>     server = TimeServer.new
>     server.audit = true                  # Turn logging on.
>     server.start
>     puts "Server started...\n"
>   end #host == 'localhost'
>
>   # Test server
>   while (true)
>     sleep TIME_OUT
>     puts("Connecting to server #{host}:#{port} at #{Time.now}\n")
>     h = Net::HTTP.new(host,port)
>     res, data = h.get('/index.html', nil )
>     puts("Code: #{res.code} Msg: #{res.message}\n")
>   end
> 
> > -- > Posted via http://www.ruby-forum.com/. >