netclientclock: bind socket before querying local address
authorTim-Philipp Müller <tim@centricular.net>
Tue, 9 Apr 2013 09:17:45 +0000 (10:17 +0100)
committerTim-Philipp Müller <tim@centricular.net>
Tue, 9 Apr 2013 18:38:59 +0000 (19:38 +0100)
Fails on windows otherwise.

https://bugzilla.gnome.org/show_bug.cgi?id=697608

libs/gst/net/gstnetclientclock.c

index c1f4ccd..add8e15 100644 (file)
@@ -346,6 +346,7 @@ gst_net_client_clock_start (GstNetClientClock * self)
 {
   GSocketAddress *servaddr;
   GSocketAddress *myaddr;
+  GSocketAddress *anyaddr;
   GInetAddress *inetaddr;
   GSocket *socket;
   GError *error = NULL;
@@ -359,6 +360,16 @@ gst_net_client_clock_start (GstNetClientClock * self)
   if (socket == NULL)
     goto no_socket;
 
+  GST_DEBUG_OBJECT (self, "binding socket");
+  inetaddr = g_inet_address_new_any (G_SOCKET_FAMILY_IPV4);
+  anyaddr = g_inet_socket_address_new (inetaddr, 0);
+  g_socket_bind (socket, anyaddr, TRUE, &error);
+  g_object_unref (anyaddr);
+  g_object_unref (inetaddr);
+
+  if (error != NULL)
+    goto bind_error;
+
   /* check address we're bound to, mostly for debugging purposes */
   myaddr = g_socket_get_local_address (socket, &error);
 
@@ -403,6 +414,13 @@ no_socket:
     g_error_free (error);
     return FALSE;
   }
+bind_error:
+  {
+    GST_ERROR_OBJECT (self, "bind failed: %s", error->message);
+    g_error_free (error);
+    g_object_unref (socket);
+    return FALSE;
+  }
 getsockname_error:
   {
     GST_ERROR_OBJECT (self, "get_local_address() failed: %s", error->message);