[Nbd] [PATCH 05/11] nbd-server: treat accept errors as non-fatal
- To: nbd-general@lists.sourceforge.net
- Subject: [Nbd] [PATCH 05/11] nbd-server: treat accept errors as non-fatal
- From: "Dmitry V. Levin" <ldv@...1147...>
- Date: Fri, 22 Jun 2012 01:40:48 +0400
- Message-id: <20120621214048.GE26247@...1147...>
In most cases, an error returned by accept system call is a network
error, which should not terminate the whole nbd-server.
Signed-off-by: Dmitry V. Levin <ldv@...1147...>
---
nbd-server.c | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/nbd-server.c b/nbd-server.c
index 55b1347..82a05a3 100644
--- a/nbd-server.c
+++ b/nbd-server.c
@@ -2204,8 +2204,10 @@ int serveloop(GArray* servers) {
DEBUG("accept, ");
if(modernsock >= 0 && FD_ISSET(modernsock, &rset)) {
- if((net=accept(modernsock, (struct sockaddr *) &addrin, &addrinlen)) < 0)
- err("accept: %m");
+ if((net=accept(modernsock, (struct sockaddr *) &addrin, &addrinlen)) < 0) {
+ err_nonfatal("accept: %m");
+ continue;
+ }
client = negotiate(net, NULL, servers, NEG_INIT | NEG_MODERN);
if(!client) {
err_nonfatal("negotiation failed");
@@ -2217,8 +2219,10 @@ int serveloop(GArray* servers) {
for(i=0; i < servers->len && net < 0; i++) {
serve=&(g_array_index(servers, SERVER, i));
if(FD_ISSET(serve->socket, &rset)) {
- if ((net=accept(serve->socket, (struct sockaddr *) &addrin, &addrinlen)) < 0)
- err("accept: %m");
+ if ((net=accept(serve->socket, (struct sockaddr *) &addrin, &addrinlen)) < 0) {
+ err_nonfatal("accept: %m");
+ continue;
+ }
}
}
if(net >= 0) {
--
ldv
Reply to: