From patchwork Sun Sep 10 14:38:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Samuel Thibault X-Patchwork-Id: 812150 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-84422-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="H6fbq28c"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xqtw44z6dz9s8J for ; Mon, 11 Sep 2017 00:38:28 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:subject:message-id:mime-version :content-type; q=dns; s=default; b=suX6SZYOlJm6CppKsd6ynfXMAp1IW ieolnYJBkewZuIk42KxsDtitjih1hgdnYnkVVWUuuGiKXmWgWVidsjQlWoOY3OX2 CPQ673C6gqQkXDAVLWAgOcA6KbCA/L4QyzG01lz/YqRJUAvwm+1t6oGdhNU0/Zi6 ufqmimZu9TH1NQ= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:subject:message-id:mime-version :content-type; s=default; bh=qeDEIbwGxfOxBgZBsoRCHIuEX+A=; b=H6f bq28cxDhzEyk41v9NIIj+bit1w1E/84PARzFdrtW/Q9bkc98ZQAf85QZCO3yoOFw YFgMFR2C/xJd0tufHNP2QaeoSTVPGdP09hdDA3xbHoUqzLRiqxTn9+/7+Fafu5KE Oe13yAJbRcMrxJrxjJPBWrJLWkqMt5kJCsvN0KHI= Received: (qmail 31588 invoked by alias); 10 Sep 2017 14:38:23 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 31577 invoked by uid 89); 10 Sep 2017 14:38:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_HELO_PASS, SPF_NEUTRAL autolearn=ham version=3.3.2 spammy=Hx-languages-length:1395, servers, peer X-HELO: hera.aquilenet.fr Date: Sun, 10 Sep 2017 16:38:16 +0200 From: Samuel Thibault To: libc-alpha@sourceware.org Subject: [PATCH] resolv_test.c: also cope with CONNREFUSED errors returned by recvfrom Message-ID: <20170910143816.v5tdzfyywtbi7aae@var.youpi.perso.aquilenet.fr> MIME-Version: 1.0 Content-Disposition: inline User-Agent: NeoMutt/20170113 (1.7.2) server_thread_udp_process_one already takes care of calling sendto() instead of xsendto to be able to ignore the case where the client has closed the socket. Depending on the TCP/IP stack behavior, this error could be notified later through recvfrom(), so we need to ignore it there too. * support/resolv_test.c (server_thread_udp_process_one): Call recvfrom instead of xrecvfrom, and ignore ECONNREFUSED errors. diff --git a/support/resolv_test.c b/support/resolv_test.c index 1625dcf43a..c3325b89b1 100644 --- a/support/resolv_test.c +++ b/support/resolv_test.c @@ -600,7 +600,7 @@ server_thread_udp_process_one (struct resolv_test *obj, int server_index) unsigned char query[512]; struct sockaddr_storage peer; socklen_t peerlen = sizeof (peer); - size_t length = xrecvfrom (obj->servers[server_index].socket_udp, + ssize_t length = recvfrom (obj->servers[server_index].socket_udp, query, sizeof (query), 0, (struct sockaddr *) &peer, &peerlen); /* Check for termination. */ @@ -613,6 +613,12 @@ server_thread_udp_process_one (struct resolv_test *obj, int server_index) return false; } + if (length < 0) + { + /* The other end had closed the socket, and we are notified only now. */ + TEST_VERIFY_EXIT (errno == ECONNREFUSED); + return true; + } struct query_info qinfo; parse_query (&qinfo, query, length);