コマンドsystem("rsync -rauzvq root@Host:/folder");
を発行して、自分のC++プログラムでrsyncを使用しています。
これを使用して、複数のシステムの同期を維持します。
リモートホストがシャットダウンしてもプログラムとrsyncが実行されていると、プログラムがTCPタイムアウト)の間ハングするという問題が発生しました。 rsyncソケットのTCPタイムアウトパラメータを調整しますが、方法がわかりません(--sockoptsが機能していません)。
これを修正する別の方法は、フォークされたシステムコールを作成し、特定のタイムアウト後もrsync pIDがまだ存在するかどうかを確認することです。そうでない場合は、強制終了します。これの唯一の欠点は、プロセスが本当に同期しているのか、それともTCPタイムアウト?
それで、あなたたちは何を試みますか?
コマンドラインでは、rsyncはTCPを直接話していません。送信は、sshに依存しています。
次を使用できます。
RSYNC_RSH='ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -o ServerAliveCountMax=2' rsync ...