[MacRuby] #958: Errno::EAGAIN occurs when read data from socket within Webrick.
#958: Errno::EAGAIN occurs when read data from socket within Webrick. ----------------------------------+----------------------------------------- Reporter: watson1978@… | Owner: lsansonetti@… Type: defect | Status: new Priority: major | Milestone: Component: MacRuby | Keywords: ----------------------------------+----------------------------------------- Test Script: {{{ #!ruby # test_webrick_server.rb require "webrick" class Echo < WEBrick::GenericServer def run(sock) while line = sock.gets p "[server] : get = " + line sock.print line end p :end end end server = Echo.new({ :BindAddress => "127.0.0.1", :Port => 4000, }) Signal.trap('INT') { server.shutdown } server.start }}} {{{ #!ruby # test_client.rb require "socket" host = "127.0.0.1" port = 4000 c = TCPSocket.open(host, port) ["foo\n", "bar\n"].each do |item| c.print item p c.gets end ["1234", "aaa", "bbb"].each do |item| c.puts item p c.gets end }}} Result: {{{ $ DYLD_LIBRARY_PATH=. ./macruby -I./lib test_webrick_server.rb [2010-10-17 00:43:34] INFO WEBrick 1.3.1 [2010-10-17 00:43:34] INFO ruby 1.9.2 (2008-06-03) [universal-darwin10.0] [2010-10-17 00:43:34] INFO Echo#start: pid=953 port=4000 "[server] : get = foo\n" [2010-10-17 00:43:37] ERROR Errno::EAGAIN: Resource temporarily unavailable - read() failed /Users/watson/src/macruby-dev/test_webrick_server.rb:5:in `run:' /Users/watson/src/macruby-dev/lib/webrick/server.rb:183:in `block' }}} It works as expected if I do not use Webrick. {{{ #!ruby # test_socket_server.rb require "socket" host = "127.0.0.1" port = 4000 server = TCPServer.open(port) s = server.accept while line = s.gets p "[server] : gets = " + line s.print line end }}} {{{ $ DYLD_LIBRARY_PATH=. ./macruby -I./lib test_socket_server.rb "[server] : gets = foo\n" "[server] : gets = bar\n" "[server] : gets = 1234\n" "[server] : gets = aaa\n" "[server] : gets = bbb\n" }}} -- Ticket URL: <http://www.macruby.org/trac/ticket/958> MacRuby <http://macruby.org/>
#958: Errno::EAGAIN occurs when read data from socket within Webrick. ----------------------------------+----------------------------------------- Reporter: watson1978@… | Owner: lsansonetti@… Type: defect | Status: new Priority: major | Milestone: MacRuby 1.0 Component: MacRuby | Keywords: ----------------------------------+----------------------------------------- Changes (by lsansonetti@…): * milestone: => MacRuby 1.0 -- Ticket URL: <http://www.macruby.org/trac/ticket/958#comment:1> MacRuby <http://macruby.org/>
#958: Errno::EAGAIN occurs when read data from socket within Webrick. ----------------------------------+----------------------------------------- Reporter: watson1978@… | Owner: lsansonetti@… Type: defect | Status: new Priority: major | Milestone: MacRuby 1.0 Component: MacRuby | Keywords: ----------------------------------+----------------------------------------- Comment(by watson1978@…): When I added the sleep in run(sock), I got the expecting result. {{{ #!ruby require "webrick" class Echo < WEBrick::GenericServer def run(sock) while line = sock.gets p "[server] : get = " + line sock.print line # add sleep =========== sleep 0.5 end p :end end end server = Echo.new({ :BindAddress => "127.0.0.1", :Port => 4000, }) Signal.trap('INT') { server.shutdown } server.start }}} Result: {{{ $ macruby test_webrick_server.rb [2010-12-10 23:18:27] INFO WEBrick 1.3.1 [2010-12-10 23:18:27] INFO ruby 1.9.2 (2008-06-03) [universal-darwin10.0] [2010-12-10 23:18:27] INFO Echo#start: pid=19506 port=4000 "[server] : get = foo\n" "[server] : get = bar\n" "[server] : get = 1234\n" "[server] : get = aaa\n" "[server] : get = bbb\n" :end }}} -- Ticket URL: <http://www.macruby.org/trac/ticket/958#comment:2> MacRuby <http://macruby.org/>
#958: Errno::EAGAIN occurs when read data from socket within Webrick. ----------------------------------+----------------------------------------- Reporter: watson1978@… | Owner: lsansonetti@… Type: defect | Status: closed Priority: major | Milestone: MacRuby 0.11 Component: MacRuby | Resolution: fixed Keywords: | ----------------------------------+----------------------------------------- Changes (by watson1978@…): * status: new => closed * resolution: => fixed * milestone: MacRuby 1.0 => MacRuby 0.11 Comment: Fixed with https://github.com/MacRuby/MacRuby/commit/f0633b34645dd1bfce264db367ae9417a7... -- Ticket URL: <http://www.macruby.org/trac/ticket/958#comment:3> MacRuby <http://macruby.org/>
participants (1)
-
MacRuby