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>
13 #include <mono/utils/mono-compiler.h>
19 #if !defined (HAVE_GETADDRINFO)
21 #if defined (HAVE_GETHOSTBYNAME) || defined (HAVE_GETHOSTBYNAME2)
24 add_hostent (MonoAddressInfo
*info
, int flags
, struct hostent
*h
)
26 MonoAddressEntry
*cur
, *prev
= info
->entries
;
33 info
->aliases
= g_strdupv (h
->h_aliases
);
35 while (h
->h_addr_list
[idx
]) {
36 cur
= g_new0 (MonoAddressEntry
, 1);
42 if (flags
& MONO_HINT_CANONICAL_NAME
&& h
->h_name
)
43 cur
->canonical_name
= g_strdup (h
->h_name
);
45 cur
->family
= h
->h_addrtype
;
46 cur
->socktype
= SOCK_STREAM
;
47 cur
->protocol
= 0; /* Zero means the default stream protocol */
48 cur
->address_len
= h
->h_length
;
49 memcpy (&cur
->address
, h
->h_addr_list
[idx
], h
->h_length
);
57 mono_get_address_info (const char *hostname
, int port
, int flags
, MonoAddressInfo
**result
)
59 MonoAddressInfo
*addr_info
;
60 addr_info
= g_new0 (MonoAddressInfo
, 1);
62 #ifdef HAVE_GETHOSTBYNAME2
63 if (flags
& MONO_HINT_IPV6
|| flags
& MONO_HINT_UNSPECIFIED
)
64 add_hostent (addr_info
, flags
, gethostbyname2 (hostname
, AF_INET6
));
65 if (flags
& MONO_HINT_IPV4
|| flags
& MONO_HINT_UNSPECIFIED
)
66 add_hostent (addr_info
, flags
, gethostbyname2 (hostname
, AF_INET
));
68 add_hostent (addr_info
, flags
, gethostbyname (hostname
))
71 if (!addr_info
->entries
) {
73 mono_free_address_info (addr_info
);
81 #endif /* defined (HAVE_GETHOSTBYNAME) || defined (HAVE_GETHOSTBYNAME2) */
82 #else /* !defined (HAVE_GETADDRINFO) */
84 MONO_EMPTY_SOURCE_FILE (networking_fallback
);
85 #endif /* !defined (HAVE_GETADDRINFO) */