sockaddr =
g_socket_address_enumerator_next (enumerator, cancellable, error);
if (!sockaddr) {
- GST_DEBUG_OBJECT (server, "no more addresses %s", (*error)->message);
+ if (!*error)
+ GST_DEBUG_OBJECT (server, "no more addresses %s", *error ? (*error)->message : "");
+ else
+ GST_DEBUG_OBJECT (server, "failed to retrieve next address %s", (*error)->message);
break;
}
g_error_free (sock_error);
}
if (bind_error) {
- if (error == NULL)
+ if ((error == NULL) || (*error == NULL))
g_propagate_error (error, bind_error);
else
g_error_free (bind_error);
GST_END_TEST;
+GST_START_TEST (test_bind_already_in_use)
+{
+ GstRTSPServer *serv;
+ GSocketService *service;
+ GError *error = NULL;
+ guint16 port;
+ gchar *port_str;
+
+ serv = gst_rtsp_server_new ();
+ service = g_socket_service_new ();
+
+ /* bind service to port */
+ port = g_socket_listener_add_any_inet_port (G_SOCKET_LISTENER (service), NULL, &error);
+ g_assert_no_error (error);
+
+ port_str = g_strdup_printf ("%d\n", port);
+
+ /* try to bind server to the same port */
+ g_object_set (serv, "service", port_str, NULL);
+ g_free (port_str);
+
+ /* attach to default main context */
+ fail_unless (gst_rtsp_server_attach (serv, NULL) == 0);
+
+ /* cleanup */
+ g_object_unref (serv);
+ g_socket_listener_close (G_SOCKET_LISTENER (service));
+ g_object_unref (service);
+}
+
+GST_END_TEST;
+
+
static Suite *
rtspserver_suite (void)
{
tcase_add_test (tc, test_setup_non_existing_stream);
tcase_add_test (tc, test_play);
tcase_add_test (tc, test_play_without_session);
+ tcase_add_test (tc, test_bind_already_in_use);
return s;
}