-enum {OPT_VERSION,OPT_SUFFIX,OPT_SENDER,OPT_SERVER,OPT_EXCLUDE,
- OPT_EXCLUDE_FROM,OPT_DELETE,OPT_NUMERIC_IDS,OPT_RSYNC_PATH,
- OPT_FORCE,OPT_TIMEOUT,OPT_DAEMON};
-
-static char *short_options = "oblLWHpguDCtcahvrRIxnSe:B:T:z";
-
-static struct option long_options[] = {
- {"version", 0, 0, OPT_VERSION},
- {"server", 0, 0, OPT_SERVER},
- {"sender", 0, 0, OPT_SENDER},
- {"delete", 0, 0, OPT_DELETE},
- {"force", 0, 0, OPT_FORCE},
- {"numeric-ids", 0, 0, OPT_NUMERIC_IDS},
- {"exclude", 1, 0, OPT_EXCLUDE},
- {"exclude-from",1, 0, OPT_EXCLUDE_FROM},
- {"rsync-path", 1, 0, OPT_RSYNC_PATH},
- {"one-file-system",0, 0, 'x'},
- {"ignore-times",0, 0, 'I'},
- {"help", 0, 0, 'h'},
- {"dry-run", 0, 0, 'n'},
- {"sparse", 0, 0, 'S'},
- {"cvs-exclude", 0, 0, 'C'},
- {"archive", 0, 0, 'a'},
- {"checksum", 0, 0, 'c'},
- {"backup", 0, 0, 'b'},
- {"update", 0, 0, 'u'},
- {"verbose", 0, 0, 'v'},
- {"recursive", 0, 0, 'r'},
- {"relative", 0, 0, 'R'},
- {"devices", 0, 0, 'D'},
- {"perms", 0, 0, 'p'},
- {"links", 0, 0, 'l'},
- {"copy-links", 0, 0, 'L'},
- {"whole-file", 0, 0, 'W'},
- {"hard-links", 0, 0, 'H'},
- {"owner", 0, 0, 'o'},
- {"group", 0, 0, 'g'},
- {"times", 0, 0, 't'},
- {"rsh", 1, 0, 'e'},
- {"suffix", 1, 0, OPT_SUFFIX},
- {"block-size", 1, 0, 'B'},
- {"timeout", 1, 0, OPT_TIMEOUT},
- {"temp-dir", 1, 0, 'T'},
- {"compress", 0, 0, 'z'},
- {"daemon", 0, 0, OPT_DAEMON},
- {0,0,0,0}};
-
-RETSIGTYPE sigusr1_handler(int val) {
- exit_cleanup(1);
+
+void start_server(int f_in, int f_out, int argc, char *argv[])
+{
+ set_nonblocking(f_in);
+ set_nonblocking(f_out);
+
+ io_set_sock_fds(f_in, f_out);
+ setup_protocol(f_out, f_in);
+
+ if (protocol_version >= 23)
+ io_start_multiplex_out();
+
+ if (am_sender) {
+ keep_dirlinks = 0; /* Must be disabled on the sender. */
+ if (need_messages_from_generator)
+ io_start_multiplex_in();
+
+ recv_filter_list(f_in);
+ do_server_sender(f_in, f_out, argc, argv);
+ } else {
+ do_server_recv(f_in, f_out, argc, argv);
+ }
+ exit_cleanup(0);