From c92de0b469fdeacb14ed66ac31d4447d48f91ade Mon Sep 17 00:00:00 2001 From: Johan Danielsson Date: Mon, 18 Feb 2002 19:08:59 +0000 Subject: [PATCH] mini_inetd_addrinfo that takes an addrinfo instead of a port number git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10840 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/roken/mini_inetd.c | 44 ++++++++++++++++++++++++++---------------- lib/roken/roken.h.in | 1 + 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/lib/roken/mini_inetd.c b/lib/roken/mini_inetd.c index 143e214b7..2d328f322 100644 --- a/lib/roken/mini_inetd.c +++ b/lib/roken/mini_inetd.c @@ -59,31 +59,19 @@ accept_it (int s) } /* - * Listen on `port' emulating inetd. + * Listen on a specified port, emulating inetd. */ void -mini_inetd (int port) +mini_inetd_addrinfo (struct addrinfo *ai) { - int error, ret; - struct addrinfo *ai, *a, hints; - char portstr[NI_MAXSERV]; + int ret; + struct addrinfo *a; int n, nalloc, i; int *fds; fd_set orig_read_set, read_set; int max_fd = -1; - memset (&hints, 0, sizeof(hints)); - hints.ai_flags = AI_PASSIVE; - hints.ai_socktype = SOCK_STREAM; - hints.ai_family = PF_UNSPEC; - - snprintf (portstr, sizeof(portstr), "%d", ntohs(port)); - - error = getaddrinfo (NULL, portstr, &hints, &ai); - if (error) - errx (1, "getaddrinfo: %s", gai_strerror (error)); - for (nalloc = 0, a = ai; a != NULL; a = a->ai_next) ++nalloc; @@ -116,7 +104,6 @@ mini_inetd (int port) max_fd = max(max_fd, fds[i]); ++i; } - freeaddrinfo (ai); if (i == 0) errx (1, "no sockets"); n = i; @@ -136,3 +123,26 @@ mini_inetd (int port) } abort (); } + +void +mini_inetd (int port) +{ + int error; + struct addrinfo *ai, hints; + char portstr[NI_MAXSERV]; + + memset (&hints, 0, sizeof(hints)); + hints.ai_flags = AI_PASSIVE; + hints.ai_socktype = SOCK_STREAM; + hints.ai_family = PF_UNSPEC; + + snprintf (portstr, sizeof(portstr), "%d", ntohs(port)); + + error = getaddrinfo (NULL, portstr, &hints, &ai); + if (error) + errx (1, "getaddrinfo: %s", gai_strerror (error)); + + mini_inetd_addrinfo(ai); + + freeaddrinfo(ai); +} diff --git a/lib/roken/roken.h.in b/lib/roken/roken.h.in index 2fcfbb45e..4adf0e844 100644 --- a/lib/roken/roken.h.in +++ b/lib/roken/roken.h.in @@ -396,6 +396,7 @@ time_t tm2time (struct tm tm, int local); int unix_verify_user(char *user, char *password); +void mini_inetd_addrinfo (struct addrinfo*); void mini_inetd (int port); int roken_concat (char *s, size_t len, ...);