+static gssize
+g_inet_socket_address_native_size (GSocketAddress *address)
+{
+ GInetSocketAddress *addr;
+
+ g_return_val_if_fail (G_IS_INET_SOCKET_ADDRESS (address), 0);
+
+ addr = G_INET_SOCKET_ADDRESS (address);
+
+ if (G_IS_INET4_ADDRESS (addr->priv->address))
+ return sizeof (struct sockaddr_in);
+ else if (G_IS_INET6_ADDRESS (addr->priv->address))
+ return sizeof (struct sockaddr_in6);
+ else
+ return -1;
+}
+
+static gboolean
+g_inet_socket_address_to_native (GSocketAddress *address, gpointer dest)
+{
+ GInetSocketAddress *addr;
+
+ g_return_val_if_fail (G_IS_INET_SOCKET_ADDRESS (address), 0);
+
+ addr = G_INET_SOCKET_ADDRESS (address);
+
+ if (G_IS_INET4_ADDRESS (addr->priv->address))
+ {
+ struct sockaddr_in *sock = (struct sockaddr_in *) dest;
+
+ sock->sin_family = AF_INET;
+ sock->sin_port = addr->priv->port;
+ memcpy (&(sock->sin_addr.s_addr), g_inet4_address_to_bytes (G_INET4_ADDRESS (addr->priv->address)), sizeof (sock->sin_addr));
+ memset (sock->sin_zero, 0, sizeof (sock->sin_zero));
+ return TRUE;
+ }
+ else if (G_IS_INET6_ADDRESS (addr->priv->address))
+ {
+ return FALSE;
+ }
+ else
+ return FALSE;
+}
+