mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-26 05:56:14 +01:00
Add bound address out-argument to g_socket_listener_add_address (#585566)
This is very useful when binding to "any" port.
This commit is contained in:
parent
91bdccff75
commit
67de6cba50
@ -250,6 +250,7 @@ g_socket_listener_add_socket (GSocketListener *listener,
|
|||||||
* @type: a #GSocketType
|
* @type: a #GSocketType
|
||||||
* @protocol: a #GSocketProtocol
|
* @protocol: a #GSocketProtocol
|
||||||
* @source_object: Optional #GObject identifying this source
|
* @source_object: Optional #GObject identifying this source
|
||||||
|
* @effective_address: location to store the address that was bound to, or %NULL.
|
||||||
* @error: #GError for error reporting, or %NULL to ignore.
|
* @error: #GError for error reporting, or %NULL to ignore.
|
||||||
*
|
*
|
||||||
* Creates a socket of type @type and protocol @protocol, binds
|
* Creates a socket of type @type and protocol @protocol, binds
|
||||||
@ -266,6 +267,12 @@ g_socket_listener_add_socket (GSocketListener *listener,
|
|||||||
* useful if you're listening on multiple addresses and do
|
* useful if you're listening on multiple addresses and do
|
||||||
* different things depending on what address is connected to.
|
* different things depending on what address is connected to.
|
||||||
*
|
*
|
||||||
|
* If successful and @effective_address is non-%NULL then it will
|
||||||
|
* be set to the address that the binding actually occured at. This
|
||||||
|
* is helpful for determining the port number that was used for when
|
||||||
|
* requesting a binding to port 0 (ie: "any port"). This address, if
|
||||||
|
* requested, belongs to the caller and must be freed.
|
||||||
|
*
|
||||||
* Returns: %TRUE on success, %FALSE on error.
|
* Returns: %TRUE on success, %FALSE on error.
|
||||||
*
|
*
|
||||||
* Since: 2.22
|
* Since: 2.22
|
||||||
@ -276,8 +283,10 @@ g_socket_listener_add_address (GSocketListener *listener,
|
|||||||
GSocketType type,
|
GSocketType type,
|
||||||
GSocketProtocol protocol,
|
GSocketProtocol protocol,
|
||||||
GObject *source_object,
|
GObject *source_object,
|
||||||
|
GSocketAddress **effective_address,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
|
GSocketAddress *local_address;
|
||||||
GSocketFamily family;
|
GSocketFamily family;
|
||||||
GSocket *socket;
|
GSocket *socket;
|
||||||
|
|
||||||
@ -301,6 +310,17 @@ g_socket_listener_add_address (GSocketListener *listener,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (effective_address)
|
||||||
|
{
|
||||||
|
local_address = g_socket_get_local_address (socket, error);
|
||||||
|
if (local_address == NULL)
|
||||||
|
{
|
||||||
|
g_object_unref (socket);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
*effective_address = local_address;
|
||||||
|
}
|
||||||
|
|
||||||
if (G_SOCKET_LISTENER_GET_CLASS (listener)->changed)
|
if (G_SOCKET_LISTENER_GET_CLASS (listener)->changed)
|
||||||
G_SOCKET_LISTENER_GET_CLASS (listener)->changed (listener);
|
G_SOCKET_LISTENER_GET_CLASS (listener)->changed (listener);
|
||||||
|
|
||||||
|
@ -92,6 +92,7 @@ gboolean g_socket_listener_add_address (GSocket
|
|||||||
GSocketType type,
|
GSocketType type,
|
||||||
GSocketProtocol protocol,
|
GSocketProtocol protocol,
|
||||||
GObject *source_object,
|
GObject *source_object,
|
||||||
|
GSocketAddress **effective_address,
|
||||||
GError **error);
|
GError **error);
|
||||||
gboolean g_socket_listener_add_inet_port (GSocketListener *listener,
|
gboolean g_socket_listener_add_inet_port (GSocketListener *listener,
|
||||||
guint16 port,
|
guint16 port,
|
||||||
|
Loading…
Reference in New Issue
Block a user