From 0b31586c7113b9b26ca0aeee9247a831b55b308c Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 3 Jul 2002 11:51:44 +0000 Subject: A patch from Bart Visscher to add an xconnect helper routine which does: -address and port resolving -tries to connect to all resolved addresses until connected -uses getaddrinfo, so works for IPv6 too This patch also ports rdate, telnet, and wget to use the new xconnect function. Thanks Bart! --- util-linux/rdate.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) (limited to 'util-linux') diff --git a/util-linux/rdate.c b/util-linux/rdate.c index 04a7612..df7d7bb 100644 --- a/util-linux/rdate.c +++ b/util-linux/rdate.c @@ -39,26 +39,14 @@ static const int RFC_868_BIAS = 2208988800UL; static time_t askremotedate(const char *host) { - struct hostent *h; - struct sockaddr_in s_in; - struct servent *tserv; unsigned long int nett, localt; + const char *port="37"; int fd; - h = xgethostbyname(host); /* get the IP addr */ - memcpy(&s_in.sin_addr, h->h_addr, sizeof(s_in.sin_addr)); + if (getservbyname("time", "tcp") != NULL) + port="time"; - s_in.sin_port = htons(37); /* find port # */ - if ((tserv = getservbyname("time", "tcp")) != NULL) - s_in.sin_port = tserv->s_port; - - s_in.sin_family = AF_INET; - - if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) /* get net connection */ - perror_msg_and_die("socket"); - - if (connect(fd, (struct sockaddr *)&s_in, sizeof(s_in)) < 0) /* connect to time server */ - perror_msg_and_die("%s", host); + fd = xconnect(host, port); if (read(fd, (void *)&nett, 4) != 4) /* read time from server */ error_msg_and_die("%s did not send the complete time", host); -- cgit v1.1