MEDIUM: tcp: report in tcp_drain() that lingering is already disabled on close

When an incoming shutdown or error is detected, we know that we
can safely close without disabling lingering. Do it in tcp_drain()
so that we don't have to do it from each and every caller.
diff --git a/src/proto_tcp.c b/src/proto_tcp.c
index c02409d..d01be31 100644
--- a/src/proto_tcp.c
+++ b/src/proto_tcp.c
@@ -541,8 +541,11 @@
 #endif
 			len = recv(fd, trash.str, trash.size, MSG_DONTWAIT | MSG_NOSIGNAL);
 
-		if (len == 0)                /* cool, shutdown received */
+		if (len == 0) {
+			/* cool, shutdown received */
+			fdtab[fd].linger_risk = 0;
 			return 1;
+		}
 
 		if (len < 0) {
 			if (errno == EAGAIN) /* connection not closed yet */
@@ -550,6 +553,7 @@
 			if (errno == EINTR)  /* oops, try again */
 				continue;
 			/* other errors indicate a dead connection, fine. */
+			fdtab[fd].linger_risk = 0;
 			return 1;
 		}
 		/* OK we read some data, let's try again once */
@@ -635,7 +639,7 @@
 	/* Write error on the file descriptor. Report it to the connection
 	 * and disable polling on this FD.
 	 */
-
+	fdtab[fd].linger_risk = 0;
 	conn->flags |= CO_FL_ERROR | CO_FL_SOCK_RD_SH | CO_FL_SOCK_WR_SH;
 	__conn_sock_stop_both(conn);
 	return 0;