mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-13 07:56:17 +01:00
add g_socket_speaks_ipv4()
Partial fix for Bug 585575.
This commit is contained in:
parent
fd22781b18
commit
f7d756f5b6
@ -1668,6 +1668,7 @@ g_socket_get_local_address
|
|||||||
g_socket_get_protocol
|
g_socket_get_protocol
|
||||||
g_socket_get_remote_address
|
g_socket_get_remote_address
|
||||||
g_socket_get_socket_type
|
g_socket_get_socket_type
|
||||||
|
g_socket_speaks_ipv4
|
||||||
<SUBSECTION Standard>
|
<SUBSECTION Standard>
|
||||||
GSocketClass
|
GSocketClass
|
||||||
G_IS_SOCKET
|
G_IS_SOCKET
|
||||||
|
@ -1102,6 +1102,7 @@ g_socket_send_to
|
|||||||
g_socket_set_blocking
|
g_socket_set_blocking
|
||||||
g_socket_set_keepalive
|
g_socket_set_keepalive
|
||||||
g_socket_set_listen_backlog
|
g_socket_set_listen_backlog
|
||||||
|
g_socket_speaks_ipv4
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1277,6 +1277,54 @@ g_socket_bind (GSocket *socket,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_socket_speaks_ipv4:
|
||||||
|
* @socket: a #GSocket
|
||||||
|
*
|
||||||
|
* Checks if a socket is capable of speaking IPv4.
|
||||||
|
*
|
||||||
|
* IPv4 sockets are capable of speaking IPv4. On some operating systems
|
||||||
|
* and under some combinations of circumstances IPv6 sockets are also
|
||||||
|
* capable of speaking IPv4. See RFC 3493 section 3.7 for more
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* No other types of sockets are currently considered as being capable
|
||||||
|
* of speaking IPv4.
|
||||||
|
*
|
||||||
|
* Returns: %TRUE if this socket can be used with IPv4.
|
||||||
|
*
|
||||||
|
* Since: 2.22.
|
||||||
|
**/
|
||||||
|
gboolean
|
||||||
|
g_socket_speaks_ipv4 (GSocket *socket)
|
||||||
|
{
|
||||||
|
switch (socket->priv->family)
|
||||||
|
{
|
||||||
|
case G_SOCKET_FAMILY_IPV4:
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case G_SOCKET_FAMILY_IPV6:
|
||||||
|
#if defined (IPPROTO_IPV6) && defined (IPV6_V6ONLY)
|
||||||
|
{
|
||||||
|
guint sizeof_int = sizeof (int);
|
||||||
|
gint v6_only;
|
||||||
|
|
||||||
|
if (getsockopt (socket->priv->fd,
|
||||||
|
IPPROTO_IPV6, IPV6_V6ONLY,
|
||||||
|
&v6_only, &sizeof_int) != 0)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return !v6_only;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
return FALSE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* g_socket_accept:
|
* g_socket_accept:
|
||||||
* @socket: a #GSocket.
|
* @socket: a #GSocket.
|
||||||
|
@ -161,6 +161,7 @@ gboolean g_socket_is_closed (GSocket
|
|||||||
GSource * g_socket_create_source (GSocket *socket,
|
GSource * g_socket_create_source (GSocket *socket,
|
||||||
GIOCondition condition,
|
GIOCondition condition,
|
||||||
GCancellable *cancellable);
|
GCancellable *cancellable);
|
||||||
|
gboolean g_socket_speaks_ipv4 (GSocket *socket);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user