diff options
author | wtc%netscape.com <devnull@localhost> | 2003-07-14 21:59:47 +0000 |
---|---|---|
committer | wtc%netscape.com <devnull@localhost> | 2003-07-14 21:59:47 +0000 |
commit | 1719368705b3679b71f280a63e40cf96d86b05e8 (patch) | |
tree | f64aae94a802ee1ea5cc8def447f98f17b27fc76 | |
parent | 6857b3b4bd650b507b6c296a6144dbbee10ee23a (diff) | |
download | nspr-hg-1719368705b3679b71f280a63e40cf96d86b05e8.tar.gz |
Bug 212566: _pr_ipv6_v6only_on_by_default needs to be defined for DARWIN
under all cases, not just when _PR_INET6_PROBE is defined, because
_PR_INET6_PROBE is only defined when Mac OS X deployment target is 10.1.
Bug 211512: defined IPV6_V6ONLY if it's not defined so that we can build on
Mac OS X 10.1, where this macro is not defined.
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH
-rw-r--r-- | pr/src/pthreads/ptio.c | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/pr/src/pthreads/ptio.c b/pr/src/pthreads/ptio.c index f2c95dcb..6222b722 100644 --- a/pr/src/pthreads/ptio.c +++ b/pr/src/pthreads/ptio.c @@ -189,6 +189,14 @@ static ssize_t (*pt_aix_sendfile_fptr)() = NULL; #endif #endif +#ifdef DARWIN +static PRBool _pr_ipv6_v6only_on_by_default; +/* The IPV6_V6ONLY socket option is not defined on Mac OS X 10.1. */ +#ifndef IPV6_V6ONLY +#define IPV6_V6ONLY 27 +#endif +#endif + #if defined(SOLARIS) #define _PRSockOptVal_t char * #elif defined(IRIX) || defined(OSF1) || defined(AIX) || defined(HPUX) \ @@ -1146,6 +1154,26 @@ void _PR_InitIO(void) _pr_stderr = pt_SetMethods(2, PR_DESC_FILE, PR_FALSE, PR_TRUE); PR_ASSERT(_pr_stdin && _pr_stdout && _pr_stderr); +#ifdef DARWIN + /* In Mac OS X v10.3 Panther Beta the IPV6_V6ONLY socket option + * is turned on by default, contrary to what RFC 3493, Section + * 5.3 says. So we have to turn it off. Find out whether we + * are running on such a system. + */ + { + int osfd; + osfd = socket(AF_INET6, SOCK_STREAM, 0); + if (osfd != -1) { + int on; + int optlen = sizeof(on); + if (getsockopt(osfd, IPPROTO_IPV6, IPV6_V6ONLY, + &on, &optlen) == 0) { + _pr_ipv6_v6only_on_by_default = on; + } + close(osfd); + } + } +#endif } /* _PR_InitIO */ void _PR_CleanupIO(void) @@ -3370,9 +3398,6 @@ failed: PR_EXTERN(PRStatus) _pr_push_ipv6toipv4_layer(PRFileDesc *fd); #if defined(_PR_INET6_PROBE) PR_EXTERN(PRBool) _pr_ipv6_is_present; -#ifdef DARWIN -static PRBool _pr_ipv6_v6only_on_by_default; -#endif PR_IMPLEMENT(PRBool) _pr_test_ipv6_socket() { PRInt32 osfd; @@ -3385,21 +3410,6 @@ PRInt32 osfd; */ osfd = socket(AF_INET6, SOCK_STREAM, 0); if (osfd != -1) { -#ifdef DARWIN - /* In Mac OS X v10.3 Panther Beta the IPV6_V6ONLY socket option - * is turned on by default, contrary to what RFC 3493, Section - * 5.3 says. So we have to turn it off. Find out whether we - * are running on such a system. - */ - { - int on; - int optlen = sizeof(on); - if (getsockopt(osfd, IPPROTO_IPV6, IPV6_V6ONLY, - &on, &optlen) == 0) { - _pr_ipv6_v6only_on_by_default = on; - } - } -#endif close(osfd); return PR_TRUE; } |