[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Nbd] [PATCH 07/11] nbd-server: do not lose connections



When select reports that more than one connection is ready to be
accepted, handle them all instead of losing all of them but one.

Signed-off-by: Dmitry V. Levin <ldv@...1147...>
---
 nbd-server.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/nbd-server.c b/nbd-server.c
index d8ac693..cd8fdb9 100644
--- a/nbd-server.c
+++ b/nbd-server.c
@@ -2263,15 +2263,14 @@ int serveloop(GArray* servers) {
 		max=modernsock>max?modernsock:max;
 	}
 	for(;;) {
-		CLIENT *client = NULL;
-
 		memcpy(&rset, &mset, sizeof(fd_set));
 		if(select(max+1, &rset, NULL, NULL, NULL)>0) {
-			int net = -1;
-			SERVER* serve=NULL;
+			int net;
 
 			DEBUG("accept, ");
 			if(modernsock >= 0 && FD_ISSET(modernsock, &rset)) {
+				CLIENT *client;
+
 				if((net=accept(modernsock, (struct sockaddr *) &addrin, &addrinlen)) < 0) {
 					err_nonfatal("accept: %m");
 					continue;
@@ -2282,19 +2281,20 @@ int serveloop(GArray* servers) {
 					close(net);
 					continue;
 				}
-				serve = client->server;
+				handle_connection(servers, net, client->server, client);
 			}
-			for(i=0; i < servers->len && net < 0; i++) {
+			for(i=0; i < servers->len; i++) {
+				SERVER *serve;
+
 				serve=&(g_array_index(servers, SERVER, i));
 				if(FD_ISSET(serve->socket, &rset)) {
 					if ((net=accept(serve->socket, (struct sockaddr *) &addrin, &addrinlen)) < 0) {
 						err_nonfatal("accept: %m");
 						continue;
 					}
+					handle_connection(servers, net, serve, NULL);
 				}
 			}
-			if (net >= 0)
-				handle_connection(servers, net, serve, client);
 		}
 	}
 }
-- 
ldv



Reply to: