[#688] mkmf.rb - add files to clean and distclean targets — Michal Rokos <michal@...>

Hi,

25 messages 2003/01/15
[#722] Re: [RFC] mkmf.rb - add files to clean and distclean targets — Mathieu Bouchard <matju@...> 2003/01/20

On Thu, 16 Jan 2003, Michal Rokos wrote:

[#740] Re: [RFC] mkmf.rb - add files to clean and distclean targets — matz@... (Yukihiro Matsumoto) 2003/01/21

Hi,

[#724] Symbols: More Functionality Wanted — Ryan Pavlik <rpav@...>

I've been discussing this for a bit on #ruby-lang on OPN (or freenode or

23 messages 2003/01/20
[#728] Re: Symbols: More Functionality Wanted — matz@... (Yukihiro Matsumoto) 2003/01/20

Hi,

[#743] Re: Symbols: More Functionality Wanted — "Pit Capitain" <pit@...> 2003/01/21

On 20 Jan 2003 at 15:49, Yukihiro Matsumoto wrote:

[#767] Re: Symbols: More Functionality Wanted — Mathieu Bouchard <matju@...> 2003/01/22

[#768] Re: Symbols: More Functionality Wanted — dblack@... 2003/01/22

Hi --

[#779] Re: Symbols: More Functionality Wanted — Gavin Sinclair <gsinclair@...> 2003/01/23

On Thursday, January 23, 2003, 6:28:04 AM, dblack wrote:

Basic UNIXSocketDGram implementation

From: Matthew Bloch <mattbee@...>
Date: 2003-01-03 00:28:56 UTC
List: ruby-core #677
Has anyone else tried adding UNIX datagram sockets to Ruby?  I can't quite see 
the use of them myself, but they're a staple part of controlling User-Mode 
Linux remotely; my basic implementation looks like this:

class UNIXSocketDGram

  attr_reader :path

  private
  def sockaddr_struct_un(path)
    [Socket::AF_UNIX, path, 0].pack("Sa#{path.length}c")
  end

  private
  def initialize(path="/tmp/localunixdgram-#{$$}-#{rand(1000000)}")
    @proxy = Socket.new(Socket::AF_UNIX, Socket::SOCK_DGRAM, 0)
    @proxy.bind(sockaddr_struct_un(path))
    @path = path
  end
  
  public
  def send(data, flags, dest)
    @proxy.send(data, flags, sockaddr_struct_un(dest))
  end
  
  public
  def recvfrom(len)
    data, sender = @proxy.recvfrom(len)
    return [data, [sender]]
  end
end

My problem is that it seems possible to call @proxy.send to a socket which 
causes the Ruby process to block regardless of signals.  I've tried a fairly 
desperate Kernel.syscall(27, 1) (i.e. deliver SIGALRM after 1 sec) to try to 
break such a blocking call, but still it hangs until I deliver a SIGTERM.

This only seems to happen when trying to talk to a UNIX socket which is being 
handled by a hung User-Mode Linux process: my question is, I suppose, whether 
I can do anything in Ruby to avert this hanging / blocking effect, or whether 
I can detect that it might happen before calling send on the socket.

Any ideas would be appreciated.

-- 
Matthew          > http://www.soup-kitchen.net/
                 > ICQ 19482073 > AIM MattbeeUK



In This Thread

Prev Next