[Nbd] [PATCH 07/11] nbd-server: do not lose connections
- To: nbd-general@lists.sourceforge.net
- Subject: [Nbd] [PATCH 07/11] nbd-server: do not lose connections
- From: "Dmitry V. Levin" <ldv@...1147...>
- Date: Fri, 22 Jun 2012 01:42:19 +0400
- Message-id: <20120621214218.GG26247@...1147...>
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: