> It's probably due to the fact that the Ruby interpreter
> releases control to Windows when it waits for events. So you
> have to have an event on a regular basis... 
> 
> I've had the same problem with a TCPServer and came up with the
> following hack:
> 
>          # The hack...
> 
>  def self.trap(signal)
>    Kernel::trap(signal){yield}
>    Thread.new{loop{sleep 1}} # Stupid Windows...
>  end

Who is the self in this case? TCPServer?

>  
>          # Doesn't work with Kernel.trap .
>          # Try it!
> 
>  trap("INT"){puts "Terminating..." ; exit}
> 
>          # Just a demo...
> 
>  require "socket"
>  puts "Hit ^C..."
>  TCPServer.new("0.0.0.0", 1234).accept

I tried serveral permutations I could think of but nothing worked :/
Will continue Monday...