diff options
author | brian <brian@FreeBSD.org> | 2001-08-18 19:16:56 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 2001-08-18 19:16:56 +0000 |
commit | 1f224ee69c85230adf44e21d13c1a5d0b034cfc2 (patch) | |
tree | ffca173771f3a65c318c6465d4b1026bdf362e01 /usr.sbin/ppp/server.c | |
parent | bc8b09d67e1b5777099543fc66deff395897b04a (diff) | |
download | FreeBSD-src-1f224ee69c85230adf44e21d13c1a5d0b034cfc2.zip FreeBSD-src-1f224ee69c85230adf44e21d13c1a5d0b034cfc2.tar.gz |
If AF_INET6 isn't available in the kernel, revert to creating AF_INET
listening sockets in ``set server''.
Diffstat (limited to 'usr.sbin/ppp/server.c')
-rw-r--r-- | usr.sbin/ppp/server.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/usr.sbin/ppp/server.c b/usr.sbin/ppp/server.c index 3f24fc5..cb25f92 100644 --- a/usr.sbin/ppp/server.c +++ b/usr.sbin/ppp/server.c @@ -46,6 +46,7 @@ #include "id.h" #include "prompt.h" #include "ncpaddr.h" +#include "probe.h" static int server_UpdateSet(struct fdescriptor *d, fd_set *r, fd_set *w, fd_set *e, int *n) @@ -308,9 +309,8 @@ enum server_stat server_TcpOpen(struct bundle *bundle, u_short port) { struct sockaddr_storage ss; -#ifdef NOINET6 struct sockaddr_in *sin = (struct sockaddr_in *)&ss; -#else +#ifndef NOINET6 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&ss; #endif int s, sz; @@ -322,20 +322,24 @@ server_TcpOpen(struct bundle *bundle, u_short port) return SERVER_INVALID; memset(&ss, '\0', sizeof ss); -#ifdef NOINET6 - sin->sin_family = AF_INET; - sin->sin_port = htons(port); - sin->sin_len = sizeof ss; - sin->sin_addr.s_addr = INADDR_ANY; - sz = sizeof *sin; - s = socket(PF_INET, SOCK_STREAM, 0); -#else - sin6->sin6_family = AF_INET6; - sin6->sin6_port = htons(port); - sin6->sin6_len = sizeof ss; - sz = sizeof *sin6; - s = socket(PF_INET6, SOCK_STREAM, 0); +#ifndef NOINET6 + if (probe.ipv6_available) { + sin6->sin6_family = AF_INET6; + sin6->sin6_port = htons(port); + sin6->sin6_len = sizeof ss; + sz = sizeof *sin6; + s = socket(PF_INET6, SOCK_STREAM, 0); + } else #endif + { + sin->sin_family = AF_INET; + sin->sin_port = htons(port); + sin->sin_len = sizeof ss; + sin->sin_addr.s_addr = INADDR_ANY; + sz = sizeof *sin; + s = socket(PF_INET, SOCK_STREAM, 0); + } + if (s < 0) { log_Printf(LogERROR, "Tcp: socket: %s\n", strerror(errno)); goto failed; |