Cope with --listen-address for not yet existent addr in bind-dynamic mode.
diff --git a/src/network.c b/src/network.c
index 90fdde9..fda50bd 100644
--- a/src/network.c
+++ b/src/network.c
@@ -338,13 +338,22 @@
 	sprintf(daemon->addrbuff, "port %d", port);
       s = _("failed to create listening socket for %s: %s");
       
-      if (dienow)
-	die(s, daemon->addrbuff, EC_BADNET);
+      if (fd != -1)
+	close (fd);
       
-      my_syslog(LOG_ERR, s, daemon->addrbuff, strerror(errno));
+      if (dienow)
+	{
+	  /* failure to bind addresses given by --listen-address at this point
+	     is OK if we're doing bind-dynamic */
+	  if (!option_bool(OPT_CLEVERBIND))
+	    die(s, daemon->addrbuff, EC_BADNET);
+	}
+      else
+	my_syslog(LOG_WARNING, s, daemon->addrbuff, strerror(errno));
+      
       return -1;
     }	
-
+  
   if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || !fix_fd(fd))
     goto err;
   
@@ -513,7 +522,8 @@
      no interface with a matching address. These may be valid: eg it's possible
      to listen on 127.0.1.1 even if the loopback interface is 127.0.0.1
 
-     If the address isn't valid the bind() will fail and we'll die().
+     If the address isn't valid the bind() will fail and we'll die() 
+     (except in bind-dynamic mode, when we'll complain but keep trying.)
 
      The resulting listeners have the ->iface field NULL, and this has to be
      handled by the DNS and TFTP code. It disables --localise-queries processing