server: set SO_REUSEADDR before bind
authorWim Taymans <wim.taymans@collabora.co.uk>
Sat, 18 Dec 2010 10:24:48 +0000 (11:24 +0100)
committerWim Taymans <wim.taymans@gmail.com>
Sat, 18 Dec 2010 10:24:48 +0000 (11:24 +0100)
Set the SO_REUSEADDR _before_ bind() to make it actually work.

gst/rtsp-server/rtsp-server.c

index b4ce7b2..70396aa 100644 (file)
@@ -464,6 +464,15 @@ gst_rtsp_server_sink_init_send (GstRTSPServer * server)
       continue;
     }
 
+    /* make address reusable */
+    ret = 1;
+    if (setsockopt (sockfd, SOL_SOCKET, SO_REUSEADDR,
+            (void *) &ret, sizeof (ret)) < 0) {
+      /* warn but try to bind anyway */
+      GST_WARNING_OBJECT (server, "failed to reuse socker (%s)",
+          g_strerror (errno));
+    }
+
     if (bind (sockfd, rp->ai_addr, rp->ai_addrlen) == 0) {
       GST_DEBUG_OBJECT (server, "bind on %s", rp->ai_canonname);
       break;
@@ -483,12 +492,6 @@ gst_rtsp_server_sink_init_send (GstRTSPServer * server)
   GST_DEBUG_OBJECT (server, "opened sending server socket with fd %d",
       server->server_sock.fd);
 
-  /* make address reusable */
-  ret = 1;
-  if (setsockopt (server->server_sock.fd, SOL_SOCKET, SO_REUSEADDR,
-          (void *) &ret, sizeof (ret)) < 0)
-    goto reuse_failed;
-
   /* keep connection alive; avoids SIGPIPE during write */
   ret = 1;
   if (setsockopt (server->server_sock.fd, SOL_SOCKET, SO_KEEPALIVE,
@@ -535,11 +538,6 @@ no_socket:
         g_strerror (errno));
     return FALSE;
   }
-reuse_failed:
-  {
-    GST_ERROR_OBJECT (server, "failed to reuse socket: %s", g_strerror (errno));
-    goto close_error;
-  }
 keepalive_failed:
   {
     GST_ERROR_OBJECT (server, "failed to configure keepalive socket: %s",