From: "byroot (Jean Boussier) via ruby-core" Date: 2024-08-10T09:41:25+00:00 Subject: [ruby-core:118829] [Ruby master Bug#20672] UNIXSocket.pair transmitting data between pids looks flaky Issue #20672 has been updated by byroot (Jean Boussier). Status changed from Open to Rejected Alright I've figured it out. `recv_io` creates an `IO` instance, that you then discard. But that `IO` instance once garbage collected is automatically closed. So this issue can be reproduced much earlier by calling `GC.start` just after `UNIXSocket.for_fd(main_c.recv_io.fileno)`. My suggestion fixes it, because it avoid creating two IOs for the same FD, so the GC doesn't end up closing the file descriptor. You can also fix this by setting `autoclose = false` on the IO instance returned by `recv_io`. But the cleaner way to do this is: ```ruby received_w = main_c.recv_io(UNIXSocket.) ``` So yeah, not a bug in ruby, but in your code. ---------------------------------------- Bug #20672: UNIXSocket.pair transmitting data between pids looks flaky https://bugs.ruby-lang.org/issues/20672#change-109394 * Author: danh337 (Dan H) * Status: Rejected * ruby -v: ruby 3.3.4 (2024-07-09 revision be1089c8ec) [x86_64-linux] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- I have code that uses UNIXSocket.pair and fork to send data between parent and child. It seems to work fine for a small number of messages passed, but then fails with Errno::EBADF on the child pid writing to its socket received from the parent. I attached a test driver which includes successful and failed test runs. This is boiled down logic from a larger app, where I first started seeing this issue. I believe I first saw this on Ruby 3.0, but now I am on 3.3.4. This *could* be me, as in my code or my workstation env, but I have not been able to prove that from many web searches. If you look at my test driver and see something wrong with it, I will take the shame and learn something. BUT just in case this is an issue in low level Ruby code, I am submitting this here. ---Files-------------------------------- test.rb (13 KB) -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/