【发布时间】:2010-09-07 12:07:07
【问题描述】:
我希望能够编写一个 ruby 程序,它可以在不中断套接字连接的情况下重新启动。
【问题讨论】:
我希望能够编写一个 ruby 程序,它可以在不中断套接字连接的情况下重新启动。
【问题讨论】:
您说的是网络套接字,而不是我认为的 UNIX 套接字?
我不确定这是否适合您的需求,但我的做法是将网络和逻辑部分分开,只重新启动逻辑部分,然后将逻辑部分重新连接到网络部分。
【讨论】:
该程序获取 Google 的主页,然后当您通过 Ctrl-C 向它传递 SIG_INT 时,它会重新启动程序并使用 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
【讨论】:
initialize': Bad file descriptor (Errno::EBADF) from simple_connector.rb:8:in open' from simple_connector.rb:8:in `exec 做spawn("ruby simple_connector.rb restart #{sock.fileno}", sock=>sock)。不幸的是,我认为 spawn 在其他方面也与 exec 不同。