diff options
-rw-r--r-- | pjlib/include/pj/compat/os_auto.h.in | 4 | ||||
-rw-r--r-- | pjlib/src/pj/sock_common.c | 5 |
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 { |