/*
 * $Id: suck_server.c,v 1.3 2002/06/06 22:36:38 conrads Exp $
 */

#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#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);
		}
	}
}


syntax highlighted by Code2HTML, v. 0.9.1