source
sockaddr.c
line
553 - 585
function
553 APR_DECLARE(apr_status_t) apr_sockaddr_info_get(apr_sockaddr_t **sa,
554 const char *hostname,
555 apr_int32_t family, apr_port_t port,
556 apr_int32_t flags, apr_pool_t *p)
557 {
558 apr_int32_t masked;
559 *sa = NULL;
560
561 if ((masked = flags & (APR_IPV4_ADDR_OK | APR_IPV6_ADDR_OK))) {
562 if (!hostname ||
563 family != AF_UNSPEC ||
564 masked == (APR_IPV4_ADDR_OK | APR_IPV6_ADDR_OK)) {
565 return APR_EINVAL;
566 }
567 #if !APR_HAVE_IPV6
568 if (flags & APR_IPV6_ADDR_OK) {
569 return APR_ENOTIMPL;
570 }
571 #endif
572 }
573 #if !APR_HAVE_IPV6
574 /* What may happen is that APR is not IPv6-enabled, but we're still
575 * going to call getaddrinfo(), so we have to tell the OS we only
576 * want IPv4 addresses back since we won't know what to do with
577 * IPv6 addresses.
578 */
579 if (family == APR_UNSPEC) {
580 family = APR_INET;
581 }
582 #endif
583
584 return find_addresses(sa, hostname, family, port, flags, p);
585 }
最終更新:2009年02月08日 16:57