diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c
index d66f0002f3dc7c8e5a497c244f0c400da2ec2459..f83bb2320336eb526700615eac712184f4d5c87e 100644
--- a/src/slurmctld/controller.c
+++ b/src/slurmctld/controller.c
@@ -914,10 +914,13 @@ static void *_slurmctld_rpc_mgr(void *no_data)
 	 * Process incoming RPCs until told to shutdown
 	 */
 	while (_wait_for_server_thread()) {
+		int max_fd = -1;
 		FD_ZERO(&rfds);
-		for (i=0; i<nports; i++)
+		for (i=0; i<nports; i++) {
 			FD_SET(sockfd[i], &rfds);
-		if (select(nports, &rfds, NULL, NULL, NULL) == -1) {
+			max_fd = MAX(sockfd[i], max_fd);
+		}
+		if (select(max_fd+1, &rfds, NULL, NULL, NULL) == -1) {
 			if (errno != EINTR)
 				error("slurm_accept_msg_conn select: %m");
 			_free_server_thread();