Patch to avoid 'Connection reset by peer' error for rsync on cygwin

Dave Dykstra dwd at bell-labs.com
Thu Apr 25 14:55:01 EST 2002


Does anybody know if this might cause problems on non-Windows machines?
Would "shutdown" need to be checked in configure, or is it implemented on
all Unix variants?  I don't recall ever seeing a need for it on Unix.

- Dave

On Wed, Apr 03, 2002 at 11:39:57AM +0100, Max Bowsher wrote:
> The problem is caused because rsync does not close its sockets, and WinSock is a
> quite strict on this. The solution is to shutdown and close the fd.
> This is a 5-minute hack I've done to fix the obvious occurrences of the problem.
> It might be better to extend rsyncs cleanup functions for this, but here it is
> anyway to alert people to the problem and its fix.
> 
> Max.
> 
> BEGIN PATCH
> diff -mru rsync-2.5.5/clientserver.c rsync-2.5.5-tweaked/clientserver.c
> --- rsync-2.5.5/clientserver.c Wed Mar 27 01:03:13 2002
> +++ rsync-2.5.5-tweaked/clientserver.c Wed Apr  3 11:01:57 2002
> @@ -486,39 +486,44 @@
>   }
> 
>   if (!read_line(fd, line, sizeof(line)-1)) {
> -  return -1;
> +  goto exitwithnomodule;
>   }
> 
>   if (sscanf(line,"@RSYNCD: %d", &remote_version) != 1) {
>    io_printf(fd,"@ERROR: protocol startup error\n");
> -  return -1;
> +  goto exitwithnomodule;
>   }
> 
>   while (i == -1) {
>    line[0] = 0;
>    if (!read_line(fd, line, sizeof(line)-1)) {
> -   return -1;
> +   goto exitwithnomodule;
>    }
> 
>    if (!*line || strcmp(line,"#list")==0) {
>     send_listing(fd);
> -   return -1;
> +   goto exitwithnomodule;
>    }
> 
>    if (*line == '#') {
>     /* it's some sort of command that I don't understand */
>     io_printf(fd,"@ERROR: Unknown command '%s'\n", line);
> -   return -1;
> +   goto exitwithnomodule;
>    }
> 
>    i = lp_number(line);
>    if (i == -1) {
>     io_printf(fd,"@ERROR: Unknown module '%s'\n", line);
> -   return -1;
> +   goto exitwithnomodule;
>    }
>   }
> 
>   return rsync_module(fd, i);
> +
> +exitwithnomodule:
> + shutdown(fd,SHUT_WR);
> + close(fd);
> + return -1;
>  }
> 
> 
> END PATCH
> 
> 
> 
> 
> -- 
> To unsubscribe or change options: http://lists.samba.org/mailman/listinfo/rsync
> Before posting, read: http://www.tuxedo.org/~esr/faqs/smart-questions.html




More information about the rsync mailing list