server: set SO_REUSEADDR before bind

Set the SO_REUSEADDR _before_ bind() to make it actually work.
This commit is contained in:
Wim Taymans 2010-12-18 11:24:48 +01:00 committed by Wim Taymans
parent 1ea450179e
commit ad2e0edee5

View file

@ -464,6 +464,15 @@ gst_rtsp_server_sink_init_send (GstRTSPServer * server)
continue; 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) { if (bind (sockfd, rp->ai_addr, rp->ai_addrlen) == 0) {
GST_DEBUG_OBJECT (server, "bind on %s", rp->ai_canonname); GST_DEBUG_OBJECT (server, "bind on %s", rp->ai_canonname);
break; break;
@ -483,12 +492,6 @@ gst_rtsp_server_sink_init_send (GstRTSPServer * server)
GST_DEBUG_OBJECT (server, "opened sending server socket with fd %d", GST_DEBUG_OBJECT (server, "opened sending server socket with fd %d",
server->server_sock.fd); 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 */ /* keep connection alive; avoids SIGPIPE during write */
ret = 1; ret = 1;
if (setsockopt (server->server_sock.fd, SOL_SOCKET, SO_KEEPALIVE, if (setsockopt (server->server_sock.fd, SOL_SOCKET, SO_KEEPALIVE,
@ -535,11 +538,6 @@ no_socket:
g_strerror (errno)); g_strerror (errno));
return FALSE; return FALSE;
} }
reuse_failed:
{
GST_ERROR_OBJECT (server, "failed to reuse socket: %s", g_strerror (errno));
goto close_error;
}
keepalive_failed: keepalive_failed:
{ {
GST_ERROR_OBJECT (server, "failed to configure keepalive socket: %s", GST_ERROR_OBJECT (server, "failed to configure keepalive socket: %s",