# Adjusting rsync TCP timeout

I'm using rsync in my own C++ program by issueing the command system("rsync -rauzvq root@host:/folder");

I use this for keeping multiple systems in sync.

Now I have the problem that when a remote host shuts off and there it was still rsync-ing with my program, my program hangs for the period of the TCP timeout. So I thought, I would adjust the TCP timeout parameter for the rsync socket, but I can't figure out how (--sockopts isn't working).

Another way of fixing this would involve making a forked system call and check whether the rsync pID still exists after a certain timeout, otherwise kill it. Only downside on this is that I can't check whether the process is genuinely syncing or just hanging on a TCP timeout?

So, what would you guys try?

-
did you try the --timeout parameter? from the man page: --timeout=TIMEOUT This option allows you to set a maximum IO timeout in seconds. If no data is transferred for the specified time then rsync will exit. The default is 0, which means no timeout. –  Hartmut Oct 4 '12 at 13:56
the timeout parameter is just for I/O requests (e.g. hard-disk access etc.), not TCP requests. –  Evert Oct 4 '12 at 14:37

RSYNC_RSH='ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -o ServerAliveCountMax=2' rsync ...

Good answer, final command I used: rsync -rauzvq -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" root@host:/folder . –  Evert Oct 4 '12 at 14:53