#include	"unpxti.h"

#undef	MAXLINE
#define	MAXLINE	2

int
main(int argc, char **argv)
{
	int					tfd, flags;
	char				recvline[MAXLINE + 1];
	socklen_t			addrlen;
	struct t_unitdata	*sndptr, *rcvptr;
	struct t_uderr		*uderr;

	if (argc != 3)
		err_quit("usage: a.out <hostname or IPaddress> <service or port#>");

	tfd = Udp_client(argv[1], argv[2], (void **) &sndptr, &addrlen);

	rcvptr = T_alloc(tfd, T_UNITDATA, T_ADDR);
	uderr = T_alloc(tfd, T_UDERROR, T_ADDR);

	printf("sending to %s\n", Xti_ntop_host(&sndptr->addr));

	sndptr->udata.maxlen = MAXLINE;
	sndptr->udata.len = 1;
	sndptr->udata.buf = recvline;
	recvline[0] = 0;		/* 1-byte datagram containing null byte */
	T_sndudata(tfd, sndptr);

	do {
		rcvptr->udata.maxlen = MAXLINE;
		rcvptr->udata.buf = recvline;
		flags = 0;
		if (t_rcvudata(tfd, rcvptr, &flags) == 0) {
			recvline[rcvptr->udata.len] = 0;	/* null terminate */
			if (rcvptr->addr.len > 0)
				printf("from %s: ", Xti_ntop_host(&rcvptr->addr));
			printf("%s\n", recvline);
		} else {
			if (t_errno == TLOOK) {
				T_rcvuderr(tfd, uderr);
				printf("error %ld from %s\n",
						uderr->error, Xti_ntop_host(&uderr->addr));
			} else
				err_xti("t_rcvudata error");
			flags = 0;
		}
	} while (flags & T_MORE);
	exit(0);
}


syntax highlighted by Code2HTML, v. 0.9.1