From 123b3a7a3989a0f040da5cc16f997ff5961fe593 Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Thu, 10 Oct 2013 18:20:07 -0300 Subject: [PATCH] Check for failure when trying to bind. --- f2fchat.c | 6 +++++- friend.c | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/f2fchat.c b/f2fchat.c index 634133c..5462e6a 100644 --- a/f2fchat.c +++ b/f2fchat.c @@ -18,6 +18,7 @@ #include "friend.h" #include +#include static gboolean quit(gpointer data) { @@ -31,7 +32,10 @@ int main(int argc, char **argv) struct cache *cache; GMainLoop *loop; g_type_init(); - sock_init(); + if (sock_init()) { + fprintf(stderr, "Error creating socket.\n"); + return 1; + } create_cache(&cache); load_cache(cache, "friends.cache"); loop = g_main_loop_new(g_main_context_default(), TRUE); diff --git a/friend.c b/friend.c index fd79643..68deccd 100644 --- a/friend.c +++ b/friend.c @@ -40,14 +40,22 @@ int sock_init(void) { GSocketAddress *address; GInetAddress *any_addr; + GError *error; + int err = 0; any_addr = g_inet_address_new_any(G_SOCKET_FAMILY_IPV6); usock = g_socket_new(G_SOCKET_FAMILY_IPV6, G_SOCKET_TYPE_DATAGRAM, G_SOCKET_PROTOCOL_UDP, NULL); address = g_inet_socket_address_new(any_addr, 17078); - g_socket_bind(usock, address, TRUE, NULL); - g_object_unref(any_addr); + if (!g_socket_bind(usock, address, TRUE, &error)) { + err = error->code; + g_error_free(error); + } g_object_unref(address); - message_init(usock); - return 0; + g_object_unref(any_addr); + if (!err) + message_init(usock); + else + g_object_unref(usock); + return err; } int friend_send_message(struct friend *friend, char *buffer, size_t len) -- 2.20.1