[1204] in Kerberos-V5-bugs

home help back first fref pref prev next nref lref last post

krb5b4pl3: slave/kpropd.c: use REUSEADDR when debugging

daemon@ATHENA.MIT.EDU (Jonathan I. Kamens)
Sun Mar 19 20:54:57 1995

From: "Jonathan I. Kamens" <jik@cam.ov.com>
Date: Sun, 19 Mar 1995 20:58:01 -0500
To: krb5-bugs@MIT.EDU

When debugging is enabled and kpropd can't bind to the port, it should
try binding again after setting SO_REUSEADDR on the socket.  This
avoids problems when debugging modifications to kprop/kpropd or its
setup, when kpropd is run twice quickly in succession.

Patch follows.

--- slave/kpropd.c	1995/03/13 21:13:33	1.1
+++ slave/kpropd.c	1995/03/13 21:16:54	1.2
@@ -126,6 +126,7 @@
 	struct	sockaddr_in	sin, frominet;
 	struct servent *sp;
 	int	finet, fromlen, s;
+	int	ret;
 	
 	finet = socket(AF_INET, SOCK_STREAM, 0);
 	if (finet < 0) {
@@ -140,10 +141,22 @@
 	memset((char *) &sin,0, sizeof(sin));
 	sin.sin_family = AF_INET;
 	sin.sin_port = sp->s_port;
-	if (bind(finet, (struct sockaddr *) &sin, sizeof(sin)) < 0) {
+	if ((ret = bind(finet, (struct sockaddr *) &sin, sizeof(sin))) < 0) {
+	    if (debug) {
+		int on = 1;
+		fprintf(stderr,
+			"%s: attempting to rebind socket with SO_REUSEADDR\n",
+			progname);
+		if (setsockopt(finet, SOL_SOCKET, SO_REUSEADDR,
+			       (char *)&on, sizeof(on)) < 0)
+		    com_err(progname, errno, "in setsockopt(SO_REUSEADDR)");
+		ret = bind(finet, (struct sockaddr *) &sin, sizeof(sin));
+	    }
+	    if (ret < 0) {
 		perror("bind");
 		com_err(progname, errno, "while binding listener socket");
 		exit(1);
+	    }
 	}
 	if (!debug)
 		daemon(1, 0);	    

home help back first fref pref prev next nref lref last post