3 * Fallback networking code that rely on old BSD apis or whatever else is available.
6 * Rodrigo Kumpera (kumpera@gmail.com)
11 #include <mono/utils/networking.h>
18 #if !defined (HAVE_GETADDRINFO)
20 #if defined (HAVE_GETHOSTBYNAME) || defined (HAVE_GETHOSTBYNAME2)
23 add_hostent (MonoAddressInfo *info, int flags, struct hostent *h)
25 MonoAddressEntry *cur, *prev = info->entries;
32 info->aliases = g_strdupv (h->h_aliases);
34 while (h->h_addr_list [idx]) {
35 cur = g_new0 (MonoAddressEntry, 1);
41 if (flags & MONO_HINT_CANONICAL_NAME && h->h_name)
42 cur->canonical_name = g_strdup (h->h_name);
44 cur->family = h->h_addrtype;
45 cur->socktype = SOCK_STREAM;
46 cur->protocol = 0; /* Zero means the default stream protocol */
47 cur->address_len = h->h_length;
48 memcpy (&cur->address, h->h_addr_list [idx], h->h_length);
56 mono_get_address_info (const char *hostname, int port, int flags, MonoAddressInfo **result)
58 MonoAddressInfo *addr_info;
59 addr_info = g_new0 (MonoAddressInfo, 1);
61 #ifdef HAVE_GETHOSTBYNAME2
62 if (flags & MONO_HINT_IPV6 || flags & MONO_HINT_UNSPECIFIED)
63 add_hostent (addr_info, flags, gethostbyname2 (hostname, AF_INET6));
64 if (flags & MONO_HINT_IPV4 || flags & MONO_HINT_UNSPECIFIED)
65 add_hostent (addr_info, flags, gethostbyname2 (hostname, AF_INET));
67 add_hostent (addr_info, flags, gethostbyname (hostname))
70 if (!addr_info->entries) {
72 mono_free_address_info (addr_info);
80 #endif /* defined (HAVE_GETHOSTBYNAME) || defined (HAVE_GETHOSTBYNAME2) */
82 #endif /* !defined (HAVE_GETADDRINFO) */