Check for failure when trying to bind.
authorThadeu Lima de Souza Cascardo <cascardo@cascardo.info>
Thu, 10 Oct 2013 21:20:07 +0000 (18:20 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@cascardo.info>
Thu, 10 Oct 2013 21:20:07 +0000 (18:20 -0300)
f2fchat.c
friend.c

index 634133c..5462e6a 100644 (file)
--- a/f2fchat.c
+++ b/f2fchat.c
@@ -18,6 +18,7 @@
 
 #include "friend.h"
 #include <glib.h>
+#include <stdio.h>
 
 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);
index fd79643..68deccd 100644 (file)
--- 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)