Hello, When rsync'ing over an ISDN 64kb/s channel, I get reported mostly 0 kB/s: 1287 100% 0.00kB/s 0:00:00 home/httpd/html/mirrors/developer.apple.com/techpubs/macosx/System/Documentation/Developer/YellowBox/TasksAndConcepts/JavaTutorial/3.JavaDebugging/toc.html 731 100% 0.00kB/s 0:00:00 home/httpd/html/mirrors/developer.apple.com/techpubs/macosx/System/Documentation/Developer/YellowBox/TasksAndConcepts/JavaTutorial/Images/javapromo.gif 10898 100% 0.00kB/s 0:00:00 home/httpd/html/mirrors/developer.apple.com/techpubs/macosx/System/Documentation/Developer/YellowBox/TasksAndConcepts/JavaTutorial/Images/mapheader.gif 953 100% 0.00kB/s 0:00:00 home/httpd/html/mirrors/developer.apple.com/techpubs/macosx/System/Documentation/Developer/YellowBox/TasksAndConcepts/JavaTutorial/Images/number1.gif 218 100% 0.00kB/s 0:00:00 home/httpd/html/mirrors/developer.apple.com/techpubs/macosx/System/Documentation/Developer/YellowBox/TasksAndConcepts/JavaTutorial/Images/number2.gif 242 100% 0.00kB/s 0:00:00 home/httpd/html/mirrors/developer.apple.com/techpubs/macosx/System/Documentation/Developer/YellowBox/TasksAndConcepts/JavaTutorial/Images/number3.gif 247 100% 0.00kB/s 0:00:00 home/httpd/html/mirrors/developer.apple.com/techpubs/macosx/System/Documentation/Developer/YellowBox/TasksAndConcepts/JavaTutorial/JavaTutorialConcepts-1.gif 8778 100% 0.00kB/s 0:00:00 home/httpd/html/mirrors/developer.apple.com/techpubs/macosx/System/Documentation/Developer/YellowBox/TasksAndConcepts/ObjectiveC/coreobjc.htm 99105 100% 68.06kB/s 0:00:01 home/httpd/html/mirrors/developer.apple.com/techpubs/macosx/System/Documentation/Developer/YellowBox/TasksAndConcepts/ObjectiveC/grammar.htm 12976 100% 0.00kB/s 0:00:00 home/httpd/html/mirrors/developer.apple.com/techpubs/macosx/System/Documentation/Developer/YellowBox/TasksAndConcepts/ObjectiveC/introobj.htm 12867 100% 0.00kB/s 0:00:00 home/httpd/html/mirrors/developer.apple.com/techpubs/macosx/System/Documentation/Devel (when rsync is invoked with the following option, but that's not significant I believe: rsync -v -c -a -l -H -p -o -g -D -t -S -x -z \ --progress \ --bwlimit 5000 \ -e ssh root@hermes.afaa.asso.fr:/ /fireball/hermes ) I think the problem is in receive_data (receiver.c): sum_init(); for (i=recv_token(f_in,&data); i != 0; i=recv_token(f_in,&data)) { show_progress(offset, total_size); A call to show_progress should be included before the for loop, that is, before waiting for the first and often only packet in recv_token: sum_init(); show_progress(0, total_size); for (i=recv_token(f_in,&data); i != 0; i=recv_token(f_in,&data)) { show_progress(offset, total_size); Then, the show_progress call inside the for loop could be moved at the end of the loop. Note that inside show_progress, I believe that gettimeofday could be called only when ofs==0 or when it's usefull: void show_progress(OFF_T ofs, OFF_T size) { extern int do_progress, am_server; struct timeval now; if((ofs==0)||(do_progress && !am_server && ofs > last_ofs + 1000)){ gettimeofday(&now, NULL); if (!start_time.tv_sec && !start_time.tv_usec) { start_time.tv_sec = now.tv_sec; start_time.tv_usec = now.tv_usec; start_ofs = ofs; } if((msdiff(&print_time, &now) > 250){ rprint_progress(ofs, size, &now, False); last_ofs = ofs; print_time.tv_sec = now.tv_sec; print_time.tv_usec = now.tv_usec; } } } Disclaimer: I've not tested these modifications yet. -- __Pascal_Bourguignon__ (o_ Software patents are endangering () ASCII ribbon against html email //\ the computer industry all around /\ and Microsoft attachments. V_/ the world http://lpf.ai.mit.edu/ 1962:DO20I=1.100 2001:my($f)=`fortune`; http://petition.eurolinux.org/ You're a web designer? Please read http://www.useit.com/alertbox/ ! -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/IT d? s++:++(+++)>++ a C+++ UB+++L++++$S+X++++>$ P- L+++ E++ W++ N++ o-- K- w------ O- M++$ V PS+E++ Y++ PGP++ t+ 5? X+ R !tv b++(+) DI+++ D++ G++ e+++ h+(++) r? y---? UF++++ ------END GEEK CODE BLOCK------