80 lines
1.3 KiB
C
80 lines
1.3 KiB
C
#include <stdio.h>
|
|
#include <signal.h>
|
|
#include "amoeba.h"
|
|
|
|
#define BUFSIZE 20480
|
|
|
|
char * cmd;
|
|
|
|
|
|
catchalarm()
|
|
{
|
|
fprintf(stderr, "%s: timeout\n", cmd);
|
|
exit(1);
|
|
}
|
|
|
|
|
|
main(argc, argv)
|
|
int argc;
|
|
char ** argv;
|
|
{
|
|
unshort getreq();
|
|
unshort putrep();
|
|
char * malloc();
|
|
int catchalarm();
|
|
|
|
char * buf;
|
|
header hdr;
|
|
unshort cnt;
|
|
unshort bufsize = BUFSIZE;
|
|
unsigned tim = 15 * 60; /* #secs before timeout */
|
|
|
|
cmd = *argv;
|
|
if (argc > 1 && strncmp(argv[1], "-t", 2) == 0)
|
|
{
|
|
tim = atoi(&argv[1][2]);
|
|
argc--;
|
|
argv++;
|
|
}
|
|
if (tim)
|
|
signal(SIGALRM, catchalarm);
|
|
if (argc != 2 && argc != 3) /* if (!(argc & 2))?? */
|
|
{
|
|
fprintf(stderr, "Usage: %s [-ttime] [bufsize] port\n", cmd);
|
|
exit(-1);
|
|
}
|
|
if (argc == 3)
|
|
bufsize = atoi(argv[2]);
|
|
if ((buf = malloc(bufsize * sizeof (char))) == NULL)
|
|
{
|
|
fprintf(stderr, "%s: out of memory\n", cmd);
|
|
exit(-1);
|
|
}
|
|
strncpy(&hdr.h_port, argv[1], PORTSIZE);
|
|
for (;;)
|
|
{
|
|
if (tim)
|
|
alarm(tim);
|
|
cnt = getreq(&hdr, buf, bufsize);
|
|
if (tim)
|
|
alarm(0);
|
|
if ((short)cnt < 0)
|
|
{
|
|
fprintf(stderr, "%s: getreq failed\n", cmd);
|
|
exit(-3);
|
|
}
|
|
hdr.h_status = 0;
|
|
if (cnt != 0)
|
|
if (write(1, buf, cnt) < 0)
|
|
{
|
|
perror(cmd);
|
|
hdr.h_status = -1;
|
|
}
|
|
putrep(&hdr, NILBUF, 0);
|
|
if (hdr.h_status)
|
|
exit(-4);
|
|
if (cnt == 0)
|
|
exit(0);
|
|
}
|
|
}
|