in demo_example/asio/asio/detail/impl/socket_ops.ipp [2970:3059]
inline int gai_nsearch(const char* host,
const addrinfo_type* hints, gai_search (&search)[2])
{
int search_count = 0;
if (host == 0 || host[0] == '\0')
{
if (hints->ai_flags & AI_PASSIVE)
{
// No host and AI_PASSIVE implies wildcard bind.
switch (hints->ai_family)
{
case ASIO_OS_DEF(AF_INET):
search[search_count].host = "0.0.0.0";
search[search_count].family = ASIO_OS_DEF(AF_INET);
++search_count;
break;
case ASIO_OS_DEF(AF_INET6):
search[search_count].host = "0::0";
search[search_count].family = ASIO_OS_DEF(AF_INET6);
++search_count;
break;
case ASIO_OS_DEF(AF_UNSPEC):
search[search_count].host = "0::0";
search[search_count].family = ASIO_OS_DEF(AF_INET6);
++search_count;
search[search_count].host = "0.0.0.0";
search[search_count].family = ASIO_OS_DEF(AF_INET);
++search_count;
break;
default:
break;
}
}
else
{
// No host and not AI_PASSIVE means connect to local host.
switch (hints->ai_family)
{
case ASIO_OS_DEF(AF_INET):
search[search_count].host = "localhost";
search[search_count].family = ASIO_OS_DEF(AF_INET);
++search_count;
break;
case ASIO_OS_DEF(AF_INET6):
search[search_count].host = "localhost";
search[search_count].family = ASIO_OS_DEF(AF_INET6);
++search_count;
break;
case ASIO_OS_DEF(AF_UNSPEC):
search[search_count].host = "localhost";
search[search_count].family = ASIO_OS_DEF(AF_INET6);
++search_count;
search[search_count].host = "localhost";
search[search_count].family = ASIO_OS_DEF(AF_INET);
++search_count;
break;
default:
break;
}
}
}
else
{
// Host is specified.
switch (hints->ai_family)
{
case ASIO_OS_DEF(AF_INET):
search[search_count].host = host;
search[search_count].family = ASIO_OS_DEF(AF_INET);
++search_count;
break;
case ASIO_OS_DEF(AF_INET6):
search[search_count].host = host;
search[search_count].family = ASIO_OS_DEF(AF_INET6);
++search_count;
break;
case ASIO_OS_DEF(AF_UNSPEC):
search[search_count].host = host;
search[search_count].family = ASIO_OS_DEF(AF_INET6);
++search_count;
search[search_count].host = host;
search[search_count].family = ASIO_OS_DEF(AF_INET);
++search_count;
break;
default:
break;
}
}
return search_count;
}