summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwtc%netscape.com <devnull@localhost>2003-07-14 21:59:47 +0000
committerwtc%netscape.com <devnull@localhost>2003-07-14 21:59:47 +0000
commit1719368705b3679b71f280a63e40cf96d86b05e8 (patch)
treef64aae94a802ee1ea5cc8def447f98f17b27fc76
parent6857b3b4bd650b507b6c296a6144dbbee10ee23a (diff)
downloadnspr-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.c46
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;
}