/* * $Id: suck_server.c,v 1.3 2002/06/06 22:36:38 conrads Exp $ */ #include #include #include #include "msuck.h" extern FILE *sucklog; void suck_server(SERVER * server) { int conn; pid_t pid; /* read newsrc for this server */ if ((server->numgroups = load_newsrc(server)) <= 0) exit(EXIT_FAILURE); fprintf(sucklog, "Sucking %d groups from %s using %d connections\n", server->numgroups, server->hostname, server->maxconns); for (conn = 0; conn < server->maxconns; ++conn) { pid = fork(); switch (pid) { case -1: /* fork error */ { perror("suck_server(): fork() error"); exit(EXIT_FAILURE); } case 0: /* child */ { do_suck(server); /* never returns */ } default: /* parent */ { sleep(5); } } } exit(EXIT_SUCCESS); } /* * continuously suck all groups */ void do_suck(SERVER * server) { int i; /* do forever */ for (;;) { /* suck all the groups */ for (i = 0; i < server->numgroups; ++i) { suck_group(server, i); sleep(5); } } }