私は、ソケット接続を落とさずに再起動できるRubyプログラムを書くことができるようにしたいと思います。RubyでUnix上で永続的なネットワークソケットを作成するにはどうすればよいですか?
0
A
答えて
1
このプログラムは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
0
あなたはUNIXソケットではなくネットワークソケットについて話していますか?
これはあなたのニーズに合っているのかどうかはわかりませんが、ネットワーキングとロジック部分を分離し、ロジック部分を再起動してから、ネットワーキング部分に再接続するだけです。
関連する問題
- 1. Rubyで永続ハッシュを作成するにはどうすればよいですか?
- 2. docker-compose up-up-upで永続的なストレージを作成するにはどうすればいいですか?
- 3. PHPでAsteriskマネージャーに永続的な接続を確立するにはどうすればよいですか?
- 4. PHPで永続セッションを作成するにはどうすればよいですか?
- 5. ナビゲーションコントローラの下部に永続ボタンを作成するにはどうすればよいですか?
- 6. 永続セッションをアクティブにするにはどうすればよいですか?
- 7. Rubyで2D配列を動的に作成するにはどうすればよいですか?
- 8. Luigiで非永続タスクを作成するにはどうすればいいですか?
- 9. 永続的なデータを持つPrestashopドッカーコンテナを実行するにはどうすればよいですか?
- 10. Android Studioで言語を永続的に変更するにはどうすればよいですか?
- 11. solaris sparcでrootのパスを永続的に変更するにはどうすればよいですか?
- 12. AndroidでTextViewテキストを永続的に変更するにはどうすればよいですか?
- 13. 永続的なユーザー環境変数を設定するにはどうすればよいですか?
- 14. 永続的なコールバックとはどういう意味ですか?
- 15. rubyonrailsに再帰的なディレクトリリストのxmlマップを作成するにはどうすればいいですか?
- 16. ステージ上でビデオオブジェクトを静的に作成するにはどうすればよいですか?
- 17. UNIXでデータベースから値をフェッチしたフラットファイルを作成するにはどうすればよいですか?
- 18. JARをEclipseに永続的に追加するにはどうすればよいですか?
- 19. Mac端末にクラスパスを永続的に追加するにはどうすればよいですか?
- 20. 永続的な拡張ページを作成するにはどうしたらいいですか?
- 21. 動的に作成された 'el'でバックボーンビューを作成するにはどうすればよいですか?
- 22. リンクのクリックを永続的に保存するにはどうすればよいですか?
- 23. UCMアクティビティ名を永続的に変更するにはどうすればよいですか?
- 24. TensorflowをKerasプライマリバックエンドとして永続的に設定するにはどうすればよいですか?
- 25. Windows環境変数を永続的に設定するにはどうすればよいですか?
- 26. 環境変数を永続的に追加するにはどうすればよいですか?
- 27. 動的URLを作成するにはどうすればよいですか?
- 28. 動的ルートを作成するにはどうすればよいですか?
- 29. ABAPで段階的に動的な構造を作成するにはどうすればよいですか?
- 30. 異なるノード間でdialogDataを永続化するにはどうすればよいですか?
再起動すると:simple_connector.rb:8:で '初期化 ':不正なファイルディスクリプタsimple_connector.rbから(ERRNO :: EBADF) :8:オープン'で':8: simple_connector.rbからの内' ' –
Paul
よりhttp://www.ruby-doc.org/core-2.1.2/IO.html#method-i-close_on_exec-3D Rubyはデフォルトですべてのファイル記述子のclose-on-execフラグを設定しています2.0.0。だから自分で設定する必要はありません。また、close-on-execフラグを解除すると、別のスレッドがfork()やexec()(例えばsystem()メソッド経由)を使用しているとファイル記述子のリークが発生する可能性があります。子プロセスへのファイル記述子の継承が本当に必要な場合は、fd => fdのようなspawn()の引数を使用します。 – ryantm
私がやったことは、あなたの事例を何も変更せずに取ったことです。 close-on-execフラグを適切に処理する方法の例を教えてください。私はexecの前にそれを本当に設定するべきですか? – Paul