diff -ur freeradius-server-2.1.7/src/main/listen.c freeradius-server-2.1.7-patch/src/main/listen.c
--- freeradius-server-2.1.7/src/main/listen.c	2009-09-14 18:43:29.000000000 +0400
+++ freeradius-server-2.1.7-patch/src/main/listen.c	2009-10-14 17:37:30.000000000 +0400
@@ -1701,7 +1701,7 @@
 		}
 		
 		if (sock->port > last_proxy_port) {
-			last_proxy_port = sock->port + 1;
+			last_proxy_port = sock->port;
 		}
 		if (!old) old = sock;
 
@@ -1733,15 +1733,14 @@
 	/*
 	 *	Keep going until we find an unused port.
 	 */
-	for (port = last_proxy_port; port < 64000; port++) {
+	for (port = last_proxy_port + 1; port < 64000; port++) {
 		int rcode;
 
 		sock->port = port;
 
 		rcode = listen_bind(this);
 		if (rcode < 0) {
-			listen_free(&this);
-			return NULL;
+			continue;
 		}
 		
 		/*