mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-12 07:26:15 +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
|
||||
* @protocol: a #GSocketProtocol
|
||||
* @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.
|
||||
*
|
||||
* 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
|
||||
* 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.
|
||||
*
|
||||
* Since: 2.22
|
||||
@ -276,8 +283,10 @@ g_socket_listener_add_address (GSocketListener *listener,
|
||||
GSocketType type,
|
||||
GSocketProtocol protocol,
|
||||
GObject *source_object,
|
||||
GSocketAddress **effective_address,
|
||||
GError **error)
|
||||
{
|
||||
GSocketAddress *local_address;
|
||||
GSocketFamily family;
|
||||
GSocket *socket;
|
||||
|
||||
@ -301,6 +310,17 @@ g_socket_listener_add_address (GSocketListener *listener,
|
||||
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)
|
||||
G_SOCKET_LISTENER_GET_CLASS (listener)->changed (listener);
|
||||
|
||||
|
@ -92,6 +92,7 @@ gboolean g_socket_listener_add_address (GSocket
|
||||
GSocketType type,
|
||||
GSocketProtocol protocol,
|
||||
GObject *source_object,
|
||||
GSocketAddress **effective_address,
|
||||
GError **error);
|
||||
gboolean g_socket_listener_add_inet_port (GSocketListener *listener,
|
||||
guint16 port,
|
||||
|
Loading…
Reference in New Issue
Block a user