فهرست منبع

Do not terminate connection on POLLHUP if there is a data to read

z3apa3a 4 سال پیش
والد
کامیت
6279e86086
1فایلهای تغییر یافته به همراه13 افزوده شده و 13 حذف شده
  1. 13 13
      src/sockmap.c

+ 13 - 13
src/sockmap.c

@@ -469,9 +469,6 @@ log("wait writing to client");
 					CLIENTTERM = 1;
 					HASERROR |= 1;
 				}
-				else if(fds[fdsc].revents &  (POLLHUP)) {
-					CLIENTTERM = 1;
-				}
 				else {
 					if(fds[fdsc].revents & POLLIN) {
 #ifdef WITHLOG
@@ -485,6 +482,9 @@ log("ready to write to client");
 #endif
 						TOCLIENT = 1;
 					}
+					if(fds[fdsc].revents &  (POLLHUP)) {
+						if(!FROMCLIENT) CLIENTTERM = 1;
+					}
 				}
 			}
 			fdsc++;
@@ -526,12 +526,6 @@ log("poll from server failed");
 					SERVERTERM = 1;
 					HASERROR |=2;
 				}
-				if(fds[fdsc].revents &  (POLLHUP)) {
-#ifdef WITHLOG
-log("server terminated connection");
-#endif
-					SERVERTERM = 1;
-				}
 				else {
 					if(fds[fdsc].revents & POLLIN) {
 #ifdef WITHLOG
@@ -545,6 +539,12 @@ log("ready to write to server");
 #endif
 						TOSERVER = 1;
 					}
+					if(fds[fdsc].revents &  (POLLHUP)) {
+#ifdef WITHLOG
+log("server terminated connection");
+#endif
+						if(!FROMSERVER) SERVERTERM = 1;
+					}
 				}
 			}
 			fdsc++;
@@ -581,13 +581,13 @@ log("wait reading from client pipe");
 					fds[fdsc].events |= (POLLIN);
 				}
 				else {
-					if(fds[fdsc].revents &  (POLLHUP|POLLERR|POLLNVAL)){
+					if(fds[fdsc].revents &  (POLLERR|POLLNVAL)){
 						RETURN(90);
 					}
 #ifdef WITHLOG
 log("ready reading from client pipe");
 #endif
-					if(fds[fdsc].revents & POLLIN) FROMCLIENTPIPE = 1;
+					if(fds[fdsc].revents & (POLLHUP|POLLIN)) FROMCLIENTPIPE = 1;
 				}
 				fdsc++;
 			}
@@ -619,13 +619,13 @@ log("wait reading from server pipe");
 					fds[fdsc].events |= (POLLIN);
 				}
 				else {
-					if(fds[fdsc].revents &  (POLLHUP|POLLERR|POLLNVAL)){
+					if(fds[fdsc].revents &  (POLLERR|POLLNVAL)){
 						RETURN(90);
 					}
 #ifdef WITHLOG
 log("ready reading from server pipe");
 #endif
-					if(fds[fdsc].revents & POLLIN) FROMSERVERPIPE = 1;
+					if(fds[fdsc].revents & (POLLHUP|POLLIN)) FROMSERVERPIPE = 1;
 				}
 				fdsc++;
 			}