From ad2e0edee5f6139e03bfc00440a68c1e43aa7539 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Sat, 18 Dec 2010 11:24:48 +0100 Subject: [PATCH] server: set SO_REUSEADDR before bind Set the SO_REUSEADDR _before_ bind() to make it actually work. --- gst/rtsp-server/rtsp-server.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/gst/rtsp-server/rtsp-server.c b/gst/rtsp-server/rtsp-server.c index b4ce7b290d..70396aa62b 100644 --- a/gst/rtsp-server/rtsp-server.c +++ b/gst/rtsp-server/rtsp-server.c @@ -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",