#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main(int argc, char **argv) {
	register int sock;
	register int bytes;
	struct sockaddr_in sa;
	char buf[BUFSIZ+1];

	pid_t ppid = getppid();

	if (argc != 3) {
		fprintf(stderr, "Usage: %s address port\n", argv[0]);
		return 1;
	}

	if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
		perror("socket");
		return 1;
	}

	sa.sin_family = AF_INET;
	sa.sin_port = htons(atol(argv[2]));
	sa.sin_addr.s_addr = inet_addr(argv[1]);

	if (connect(sock, (struct sockaddr *)&sa, sizeof sa) < 0) {
		perror("connect");
		close(sock);
		return 2;
	}
	
	while ((bytes = read(sock, buf, BUFSIZ)) > 0) {
		if (kill(ppid, 0)) break;
		write(1, buf, bytes);
	}

	close(sock);
	return 0;
}


syntax highlighted by Code2HTML, v. 0.9.1