summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pjlib/include/pj/compat/os_auto.h.in4
-rw-r--r--pjlib/src/pj/sock_common.c5
2 files changed, 9 insertions, 0 deletions
diff --git a/pjlib/include/pj/compat/os_auto.h.in b/pjlib/include/pj/compat/os_auto.h.in
index 0cf14968..55dd6520 100644
--- a/pjlib/include/pj/compat/os_auto.h.in
+++ b/pjlib/include/pj/compat/os_auto.h.in
@@ -181,6 +181,10 @@
#if defined(PJ_DARWINOS) && PJ_DARWINOS!=0
/* Disable local host resolution in pj_gethostip() (see ticket #1342) */
# define PJ_GETHOSTIP_DISABLE_LOCAL_RESOLUTION 1
+ /* Use pj_getaddrinfo() (instead of pj_inet_pton()) in
+ * pj_sockaddr_set_str_addr()
+ */
+# define PJ_SOCKADDR_USE_GETADDRINFO 1
# include "TargetConditionals.h"
# if TARGET_OS_IPHONE
diff --git a/pjlib/src/pj/sock_common.c b/pjlib/src/pj/sock_common.c
index 0ea25fbc..96108758 100644
--- a/pjlib/src/pj/sock_common.c
+++ b/pjlib/src/pj/sock_common.c
@@ -172,8 +172,12 @@ PJ_DEF(pj_status_t) pj_sockaddr_set_str_addr(int af,
PJ_SOCKADDR_RESET_LEN(addr);
if (str_addr && str_addr->slen) {
+#if defined(PJ_SOCKADDR_USE_GETADDRINFO) && PJ_SOCKADDR_USE_GETADDRINFO!=0
+ if (1) {
+#else
status = pj_inet_pton(PJ_AF_INET6, str_addr, &addr->ipv6.sin6_addr);
if (status != PJ_SUCCESS) {
+#endif
pj_addrinfo ai;
unsigned count = 1;
@@ -181,6 +185,7 @@ PJ_DEF(pj_status_t) pj_sockaddr_set_str_addr(int af,
if (status==PJ_SUCCESS) {
pj_memcpy(&addr->ipv6.sin6_addr, &ai.ai_addr.ipv6.sin6_addr,
sizeof(addr->ipv6.sin6_addr));
+ addr->ipv6.sin6_scope_id = ai.ai_addr.ipv6.sin6_scope_id;
}
}
} else {