From: Francis Cianfrocca Date: 2006-08-08T21:28:46+09:00 Subject: Re: Signaling Ruby from C/C++ Simon, that was a nyyyyz idea to use a TCP socket, as ugly as it is, just to work around Windows' even-uglier-ness. Here's a simpler version of your code (notice I commented out the server.close, which may cause problems on some platforms). This code works on Linux. Haven't tested on Windows. You don't need a thread because after the server socket calls listen(2), the client can call connect(2) any time, and the partially-completed connection will be held in the kernel as long as necessary until the server calls accept(2). These events do not need to be synchronous. (I substituted Ruby's more-cooked TCP socket objects just to make it simpler, even though under the covers these objects are not really related to the Socket objects you used. In this case it doesn't seem to matter- maybe it does on Windows.) #--------------------------- require 'socket' server = TCPServer.new( 'localhost', 2200 ) wr = TCPsocket.new( 'localhost', 2200 ) rd = server.accept #server.close Thread.new { loop do puts rd.read(1) end } loop do sleep 1 wr.write '+' end #---------------------------- What's ugly about this of course is that you can only run this process once at a time because of the hardcoded port. I *know* for sure that I have solved this problem in the past with Windows pipes, because an early version of EventMachine used exactly that technique. I'll have to dig through the source-code archives and find it. -- Posted via http://www.ruby-forum.com/.