Pregunta

Me gustaría poder escribir un programa Ruby que pueda reiniciarse sin perder sus conexiones de socket.

¿Fue útil?

Solución

Este programa obtiene la página de inicio de Google y luego, cuando le pasa SIG_INT mediante ctrl-c, reinicia el programa y lee el resultado de la página de inicio desde el socket abierto con Google.

#!/usr/bin/ruby
#simple_connector.rb
require 'socket'

puts "Started."

if ARGV[0] == "restart"
  sock = IO.open(ARGV[1].to_i)
  puts sock.read
  exit
else
  sock = TCPSocket.new('google.com', 80)
  sock.write("GET /\n")
end

Signal.trap("INT") do
  puts "Restarting..."
  exec("ruby simple_connector.rb restart #{sock.fileno}")
end

while true
  sleep 1
end

Otros consejos

¿Estás hablando de sockets de red, no de sockets UNIX, supongo?

No estoy seguro de que esto se adapte a sus necesidades, pero la forma en que lo haría es separando la parte lógica y de red, reiniciando solo la parte lógica y luego reconectando la parte lógica a la parte de red.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top