return -1;
#endif
case AddressFamily_InterNetworkV6:
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
return AF_INET6;
+#else
+ return -1;
+#endif
case AddressFamily_DecNet:
#ifdef AF_DECnet
return AF_DECnet;
case AF_APPLETALK:
return AddressFamily_AppleTalk;
#endif
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
case AF_INET6:
return AddressFamily_InterNetworkV6;
+#endif
#ifdef AF_IRDA
case AF_IRDA:
return AddressFamily_Irda;
*werror = mono_w32socket_get_last_error ();
}
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
// Check whether it's ::ffff::0:0.
static gboolean
is_ipv4_mapped_any (const struct in6_addr *addr)
}
return TRUE;
}
+#endif
static MonoObject*
create_object_from_sockaddr (struct sockaddr *saddr, int sa_size, gint32 *werror, MonoError *error)
mono_field_set_value (sockaddr_obj, domain->sockaddr_data_length_field, &buffer_size);
return sockaddr_obj;
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
} else if (saddr->sa_family == AF_INET6) {
struct sockaddr_in6 *sa_in = (struct sockaddr_in6 *)saddr;
int i;
return sockaddr_obj;
}
+#endif
#ifdef HAVE_SYS_UN_H
else if (saddr->sa_family == AF_UNIX) {
int i;
size = 0;
if (family == AF_INET) {
size = sizeof (struct sockaddr_in);
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
} else if (family == AF_INET6) {
size = sizeof (struct sockaddr_in6);
}
+#endif
#ifdef HAVE_SYS_UN_H
else if (family == AF_UNIX) {
size = sizeof (struct sockaddr_un);
*sa_size = sizeof (struct sockaddr_in);
return (struct sockaddr *)sa;
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
} else if (family == AF_INET6) {
struct sockaddr_in6 *sa;
int i;
*sa_size = sizeof (struct sockaddr_in6);
return (struct sockaddr *)sa;
}
+#endif
#ifdef HAVE_SYS_UN_H
else if (family == AF_UNIX) {
struct sockaddr_un *sock_un;
return inaddr;
}
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
static struct in6_addr
ipaddress_to_struct_in6_addr (MonoObject *ipaddr)
{
return in6addr;
}
#endif
+#endif
#if defined(__APPLE__) || defined(__FreeBSD__)
#if defined(HAVE_STRUCT_IP_MREQN) || defined(HAVE_STRUCT_IP_MREQ)
{
MonoObject *address = NULL;
-
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
if (system_level == sol_ipv6) {
struct ipv6_mreq mreq6;
#endif
ret = mono_w32socket_setsockopt (sock, system_level, system_name, &mreq6, sizeof (mreq6));
- } else if (system_level == sol_ip) {
+
+ } else
+#endif
+ if (system_level == sol_ip) {
#ifdef HAVE_STRUCT_IP_MREQN
struct ip_mreqn mreq = {{0}};
#else
}
}
}
-
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
if (nlocal_in6) {
MonoString *addr_string;
int i;
}
}
}
-
+#endif
leave:
g_free (local_in);
g_free (local_in6);
{
char *address;
struct sockaddr_in saddr;
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
struct sockaddr_in6 saddr6;
+#endif
MonoAddressInfo *info = NULL;
MonoError error;
gint32 family;
if (inet_pton (AF_INET, address, &saddr.sin_addr ) == 1) {
family = AF_INET;
saddr.sin_family = AF_INET;
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
} else if (inet_pton (AF_INET6, address, &saddr6.sin6_addr) == 1) {
family = AF_INET6;
saddr6.sin6_family = AF_INET6;
+#endif
} else {
g_free (address);
return FALSE;
ret = getnameinfo ((struct sockaddr*)&saddr, sizeof (saddr), hostname, sizeof (hostname), NULL, 0, 0) == 0;
break;
}
+#ifdef HAVE_STRUCT_SOCKADDR_IN6
case AF_INET6: {
#if HAVE_SOCKADDR_IN6_SIN_LEN
saddr6.sin6_len = sizeof (saddr6);
ret = getnameinfo ((struct sockaddr*)&saddr6, sizeof (saddr6), hostname, sizeof (hostname), NULL, 0, 0) == 0;
break;
}
+#endif
default:
g_assert_not_reached ();
}