From: kvokka@... Date: 2021-06-16T02:30:53+00:00 Subject: [ruby-core:104298] [Ruby master Bug#17986] Ractor is stdlib Socket unfriendly Issue #17986 has been updated by kvokka (Mike Beliakov). This hack has a limitation which i faced with specs. For socket testing purposes i have i small [class](https://github.com/kvokka/dtn/blob/master/spec/support/socket_recorder.rb) (It should be adjusted for using with Ractors, share it just to share the idea of the problem) which replay everything from file to socket (to avoid real communication), like VHS gem. But because of Ractor limitations i can not use it inside Ractor (instance variables are prohibited) and technically I re-instantiate the socket in Ractor. The option might be to monkey patch `TCPSocket.for_fd`, but the trick is, that because it should be invoked in Ractor I can not share any spec information without another hack(s). ---------------------------------------- Bug #17986: Ractor is stdlib Socket unfriendly https://bugs.ruby-lang.org/issues/17986#change-92519 * Author: kvokka (Mike Beliakov) * Status: Open * Priority: Normal * ruby -v: ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin19] * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- **Description** In the process of playing with Ractors was found, that there is no way to use stdlib Sockets. My intent was to implement bidirectional connection with Socket using Ractors. This small console snippet is self explanatory: ```ruby [1] pry(main)> s=Ractor.make_shareable(TCPSocket.open('localhost', 9100)) => # [2] pry(main)> s.print 'foo' FrozenError: can't modify frozen TCPSocket: # from (pry):5:in `write' [3] pry(main)> s=Ractor.make_shareable(TCPSocket.open('localhost', 9100), copy: true) => # [4] pry(main)> s.print 'foo' FrozenError: can't modify frozen TCPSocket: # ``` The only option is to `move` socket in Ractor, but in this case there is no way to share the socket between 2 Ractors, so I can not put a listener loop on the socket. -- https://bugs.ruby-lang.org/ Unsubscribe: