> L?hett?j?: Bjarke Bruun <bbj / swooplinux.org>
> Aihe: Re: TCPSocket hangs after ctrl-c
> 
> On Sunday 16 January 2005 16:03, ts wrote:
> > >>>>> "B" == Bjarke Bruun <bbj / swooplinux.org> writes:
> >
> > B> 			fork {
> >
> >  Why you don't use a thread, with a block local variable for @s
> 
> This is just a "test" for me. It's not (yet anyway) in progress of 
> beeing published... the rfc is large for startes, but the fork, IMHO, 
> has less footprint than threads and threads in ruby are only threads 
> inside the ruby process so the difference is the same until Matz et. 
> al. implements native threads for ruby (which I'm waiting for :-))
> 
> The problem is not the local socket that is talking to the client it's 
> the main socket that hangs if I don't use "kill -9" and I would like to 
> find a way to fix that... "E S" has a point, but I'm new to Ruby and 
> don't quite know where to get info on usage of the 
> Signal#trap and Process#abort  right now. Always glad to learn more but 
> from scratch is hard, if you remember :-)

http://www.ruby-doc.org/ is your friend :) Look for Process and 
Signal in the Core API. 

You could do something like this (use whatever signals):

# ...
def initialize
  # ...
  Signal.trap "TERM" do
    puts "Bringing #{$0} down..."
    shutdown
    puts "...down."
  end

  @child = fork do
    # Propagated
    Signal.trap "TERM" do
      # Shutdown procedures, finish read etc.
      puts "...reader terminated..."
    end
  # ...
end

def shutdown
  # Send a signal to the child
  Process.kill "TERM", @child
  Process.wait @child
  puts "...main process terminated..."
end

> I'm looking for something like this
> 
> $ ./rsmtp.rb # the name of the server script
> 
> and then be able to press <ctrl-c> without having the socket hanging for 
> some 30 seconds before I can start the script again. I had a similar 
> experience in school a long time ago in C++ but I can't remember the 
> code I wrote back then to overcome this problem... and I don't have the 
> code anymore FYI.
> 
> I'm looking in "Programming Ruby: The Progmatic Programmer's Guide" with 
> no luck as to set up a trap for the script if it receives (SIG)KILL 
> signal - where to look?

E