#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/>