(mini_inetd): explicitly use PF_UNSPEC. be more resilient to
bind/listen failing. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10423 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1995 - 2000 Kungliga Tekniska H<>gskolan
|
* Copyright (c) 1995 - 2001 Kungliga Tekniska H<>gskolan
|
||||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -76,6 +76,7 @@ mini_inetd (int port)
|
|||||||
memset (&hints, 0, sizeof(hints));
|
memset (&hints, 0, sizeof(hints));
|
||||||
hints.ai_flags = AI_PASSIVE;
|
hints.ai_flags = AI_PASSIVE;
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
hints.ai_family = PF_UNSPEC;
|
||||||
|
|
||||||
snprintf (portstr, sizeof(portstr), "%d", ntohs(port));
|
snprintf (portstr, sizeof(portstr), "%d", ntohs(port));
|
||||||
|
|
||||||
@@ -95,14 +96,20 @@ mini_inetd (int port)
|
|||||||
for (i = 0, a = ai; a != NULL; a = a->ai_next) {
|
for (i = 0, a = ai; a != NULL; a = a->ai_next) {
|
||||||
fds[i] = socket (a->ai_family, a->ai_socktype, a->ai_protocol);
|
fds[i] = socket (a->ai_family, a->ai_socktype, a->ai_protocol);
|
||||||
if (fds[i] < 0) {
|
if (fds[i] < 0) {
|
||||||
warn ("socket");
|
warn ("socket af = %d", a->ai_family);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
socket_set_reuseaddr (fds[i], 1);
|
socket_set_reuseaddr (fds[i], 1);
|
||||||
if (bind (fds[i], a->ai_addr, a->ai_addrlen) < 0)
|
if (bind (fds[i], a->ai_addr, a->ai_addrlen) < 0) {
|
||||||
err (1, "bind");
|
warn ("bind af = %d", a->ai_family);
|
||||||
if (listen (fds[i], SOMAXCONN) < 0)
|
close(fds[i]);
|
||||||
err (1, "listen");
|
continue;
|
||||||
|
}
|
||||||
|
if (listen (fds[i], SOMAXCONN) < 0) {
|
||||||
|
warn ("listen af = %d", a->ai_family);
|
||||||
|
close(fds[i]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (fds[i] >= FD_SETSIZE)
|
if (fds[i] >= FD_SETSIZE)
|
||||||
errx (1, "fd too large");
|
errx (1, "fd too large");
|
||||||
FD_SET(fds[i], &orig_read_set);
|
FD_SET(fds[i], &orig_read_set);
|
||||||
|
Reference in New Issue
Block a user