BUG/MEDIUM: checks: prevent TIME_WAITs from appearing also on timeouts

We need to disable lingering before closing on timeout too, otherwise
we accumulate TIME_WAITs.
diff --git a/src/checks.c b/src/checks.c
index e63d34e..7f49547 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -1160,10 +1160,12 @@
 	 */
 	if (conn->xprt && conn->xprt->shutw)
 		conn->xprt->shutw(conn, 0);
-	if (!(conn->flags & CO_FL_WAIT_RD))
-		recv(conn->t.sock.fd, trash.str, trash.size, MSG_NOSIGNAL|MSG_DONTWAIT);
-	setsockopt(conn->t.sock.fd, SOL_SOCKET, SO_LINGER,
-		   (struct linger *) &nolinger, sizeof(struct linger));
+	if (conn->ctrl) {
+		if (!(conn->flags & CO_FL_WAIT_RD))
+			recv(conn->t.sock.fd, trash.str, trash.size, MSG_NOSIGNAL|MSG_DONTWAIT);
+		setsockopt(conn->t.sock.fd, SOL_SOCKET, SO_LINGER,
+			   (struct linger *) &nolinger, sizeof(struct linger));
+	}
 	__conn_data_stop_both(conn);
 	task_wakeup(t, TASK_WOKEN_IO);
 	return;
@@ -1383,6 +1385,9 @@
 				/* the check expired and the connection was not
 				 * yet closed, start by doing this.
 				 */
+				if (conn->ctrl)
+					setsockopt(conn->t.sock.fd, SOL_SOCKET, SO_LINGER,
+						   (struct linger *) &nolinger, sizeof(struct linger));
 				conn_full_close(conn);
 			}