Skip to content

Commit

Permalink
daemon: Set SO_REUSEADDR on listening sockets.
Browse files Browse the repository at this point in the history
Without this, you can silently lose the ability to receive IPv4
connections if you stop and restart the daemon.

[jc: tweaked code organization a bit and made this controllable
 from a command line option.]

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Mark Wooding authored and Junio C Hamano committed Feb 6, 2006
1 parent 363f24c commit 1955fab
Showing 1 changed file with 26 additions and 1 deletion.
27 changes: 26 additions & 1 deletion daemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@

static int log_syslog;
static int verbose;
static int reuseaddr;

static const char daemon_usage[] =
"git-daemon [--verbose] [--syslog] [--inetd | --port=n] [--export-all]\n"
" [--timeout=n] [--init-timeout=n] [--strict-paths]\n"
" [--base-path=path] [directory...]";
" [--base-path=path] [--reuseaddr] [directory...]";

/* List of acceptable pathname prefixes */
static char **ok_paths = NULL;
Expand Down Expand Up @@ -451,6 +452,16 @@ static void child_handler(int signo)
}
}

static int set_reuse_addr(int sockfd)
{
int on = 1;

if (!reuseaddr)
return 0;
return setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
&on, sizeof(on));
}

#ifndef NO_IPV6

static int socksetup(int port, int **socklist_p)
Expand Down Expand Up @@ -495,6 +506,11 @@ static int socksetup(int port, int **socklist_p)
}
#endif

if (set_reuse_addr(sockfd)) {
close(sockfd);
return 0; /* not fatal */
}

if (bind(sockfd, ai->ai_addr, ai->ai_addrlen) < 0) {
close(sockfd);
continue; /* not fatal */
Expand Down Expand Up @@ -537,6 +553,11 @@ static int socksetup(int port, int **socklist_p)
sin.sin_addr.s_addr = htonl(INADDR_ANY);
sin.sin_port = htons(port);

if (set_reuse_addr(sockfd)) {
close(sockfd);
return 0;
}

if ( bind(sockfd, (struct sockaddr *)&sin, sizeof sin) < 0 ) {
close(sockfd);
return 0;
Expand Down Expand Up @@ -663,6 +684,10 @@ int main(int argc, char **argv)
base_path = arg+12;
continue;
}
if (!strcmp(arg, "--reuseaddr")) {
reuseaddr = 1;
continue;
}
if (!strcmp(arg, "--")) {
ok_paths = &argv[i+1];
break;
Expand Down

0 comments on commit 1955fab

Please sign in to comment.