Feature #11139
Updated by normalperson (Eric Wong) almost 10 years ago
[PATCH 2/2] socket: accept_nonblock supports "nonblock: false" kwarg An application wanting to do non-blocking accept may want to create a blocking accepted socket, allow it with a kwarg while preserving default behavior. This If this patch is analogous accepted, I'd also like to support the SOCK_NONBLOCK flag in the Linux `accept4' opposite syscall. While this has little obvious effect for Ruby API users (which can emulate blocking behavior) this will reduce syscalls made internally by Ruby. Forcing accept calls: a = s.accept(nonblock: true) # blocking will preserve "wake-one" behavior accept syscall a.nonblock? # => true s.nonblock? # => false This requires the simple patch in the OS kernel to avoid a "thundering herd" problem. [Feature #11138] In all cases, existing Ruby 2.2 behavior I'm unsure if ":nonblock" is preserved by default a good keyword to maximize compatibility, especially when sharing sockets with use, since it is non-Ruby processes: `accept' and `sysaccept' calls will create sockets which are blocking by default. `accept_nonblock', calls will create sockets which are non-blocking by default. somewhat confusing