[MacRuby] #1195: Socket#accept_nonblock blocks for Unix domain socket

MacRuby ruby-noreply at macosforge.org
Tue Mar 15 13:09:08 PDT 2011


#1195: Socket#accept_nonblock blocks for Unix domain socket
--------------------------------------+-------------------------------------
 Reporter:  warpflyght@…              |       Owner:  lsansonetti@…        
     Type:  defect                    |      Status:  new                  
 Priority:  major                     |   Milestone:                       
Component:  MacRuby                   |    Keywords:                       
--------------------------------------+-------------------------------------
 Socket#accept_nonblock (and UNIXServer#accept_nonblock) appear to block. I
 haven't tried constructing a UDP or TCP socket with Socket, but I suspect
 this issue affects all Socket subclasses. Test programs:

 UNIXServer:
 {{{
 #!ruby
 require 'socket'
 require 'fileutils'

 FileUtils.rm_f("/tmp/sock")
 serv = UNIXServer.new("/tmp/sock")
 begin
   warn "Accepting."
   sock = serv.accept_nonblock
 rescue Errno::EAGAIN, Errno::EWOULDBLOCK, Errno::ECONNABORTED,
 Errno::EPROTO, Errno::EINTR
   warn "Would block; retrying."
   retry
 end
 warn "Have socket."
 }}}

 Socket:
 {{{
 #!ruby
 require 'socket'
 require 'fileutils'

 FileUtils.rm_f("/tmp/sock")
 serv = Socket.new(Socket::AF_UNIX, Socket::SOCK_STREAM, 0)
 serv.bind(Socket.sockaddr_un("/tmp/sock"))
 serv.listen(1)
 begin
   warn "Accepting."
   sock, sockaddr = serv.accept_nonblock
 rescue Errno::EAGAIN, Errno::EWOULDBLOCK, Errno::ECONNABORTED,
 Errno::EPROTO, Errno::EINTR
   warn "Would block; retrying."
   retry
 end
 warn "Have socket."
 }}}

 When run with Ruby 1.8.7 on my Snow Leopard machine, these print
 "Accepting" followed by "Would block; retrying" repeatedly, as expected.
 Under MacRuby r5278 on the same system, both programs just print
 "Accepting" and do nothing. Connecting to the socket immediately prints
 "Have socket" under both interpreters.

 I searched Trac for duplicates, but the closest I found was #554. In the
 case of IO#read_nonblock and IO#write_nonblock, the C functions are
 actually unimplemented; in this case, they are implemented, but don't work
 as documented.

-- 
Ticket URL: <http://www.macruby.org/trac/ticket/1195>
MacRuby <http://macruby.org/>



More information about the macruby-tickets mailing list