summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Adam <jakub.adam@collabora.com>2019-07-16 10:53:54 +0200
committerJakub Adam <jakub.adam@collabora.com>2019-07-19 16:41:57 +0200
commit318ba4dea6596b7825a71fdb34473549e231f757 (patch)
treebb2f0bd6a59c5433827e0c1ccbd3f9f93b8b32e9
parentc2ace8ea13c714a78b6161e8562151f4c3b9520d (diff)
downloadlibnice-318ba4dea6596b7825a71fdb34473549e231f757.tar.gz
udp-bsd: log source and destination addresses on GSocket send error
-rw-r--r--socket/udp-bsd.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/socket/udp-bsd.c b/socket/udp-bsd.c
index 6d55e15..8f65e76 100644
--- a/socket/udp-bsd.c
+++ b/socket/udp-bsd.c
@@ -289,19 +289,39 @@ socket_send_message (NiceSocket *sock, const NiceAddress *to,
len = g_socket_send_message (sock->fileno, gaddr, message->buffers,
message->n_buffers, NULL, 0, G_SOCKET_MSG_NONE, NULL, &child_error);
- g_clear_object (&gaddr);
-
if (len < 0) {
if (g_error_matches (child_error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK)) {
len = 0;
- } else {
- nice_debug_verbose ("%s: udp-bsd socket %p: error: %s", G_STRFUNC, sock,
+ } else if (nice_debug_is_verbose()) {
+ struct sockaddr sa;
+ GSocketAddress *gsocket;
+ NiceAddress local_addr;
+ NiceAddress remote_addr;
+ char remote_addr_str[INET6_ADDRSTRLEN];
+ char local_addr_str[INET6_ADDRSTRLEN];
+
+ g_socket_address_to_native (gaddr, &sa, sizeof (sa), NULL);
+ nice_address_set_from_sockaddr (&remote_addr, &sa);
+ nice_address_to_string (&remote_addr, remote_addr_str);
+
+ gsocket = g_socket_get_local_address (sock->fileno, NULL);
+ g_socket_address_to_native (gsocket, &sa, sizeof (sa), NULL);
+ nice_address_set_from_sockaddr (&local_addr, &sa);
+ nice_address_to_string (&local_addr, local_addr_str);
+ g_object_unref (gsocket);
+
+ nice_debug_verbose ("%s: udp-bsd socket %p %s:%u -> %s:%u: error: %s",
+ G_STRFUNC, sock,
+ local_addr_str, nice_address_get_port (&local_addr),
+ remote_addr_str, nice_address_get_port (&remote_addr),
child_error->message);
}
g_error_free (child_error);
}
+ g_clear_object (&gaddr);
+
return len;
}