From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15788 invoked by alias); 10 Aug 2015 10:22:28 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 36039 Received: (qmail 5056 invoked from network); 10 Aug 2015 10:22:25 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:subject:message-id:mail-followup-to:mime-version :content-type:content-disposition:user-agent; bh=M7DqR5EDhx3nO85EbHGV/H67b+rVmt02UmrbjSChLBs=; b=Q9OeO7bHHjoHuLrSNIxtyGOv6uMRx+DSA2vERcKzTraSOAYcLuJ9Yjtwpajxw7jMK6 3r467/d9ufLwl5vWSnpXm3iJ+9g5BhQyPcRdhHbhBaWVAWk789wc+exGMRidLmJETngf /fJOnUceSqAxNSvleIbVrfuq81n4zbqpoKLYFkv/Gs5Ojufxk4Ke8axp9u1HSrCM0axl gyteV7hFhvJc5PZglcBBfZHbet50BbxxtNVo/T5nk3yHNh0vFEqCXae+Bzfz9sIeetCU hEcnU1LpQ1QOaI1fxzjhZzhR3dO0YNdC4pYJnrN+zYGbTsrfJv604STEp7QzKOusH8x7 6ehA== X-Received: by 10.112.63.169 with SMTP id h9mr19523426lbs.104.1439202141289; Mon, 10 Aug 2015 03:22:21 -0700 (PDT) Date: Mon, 10 Aug 2015 12:22:12 +0200 From: Joshua Krusell To: zsh-workers@zsh.org Subject: PATCH: ignore EINTR in ztcp/zsocket accept() Message-ID: <20150810102212.GA45526@Qliphoth.local> Mail-Followup-To: zsh-workers@zsh.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) Interrupting `ztcp -a` causes zsh to exit immediately. Would it be appropriate to just ignore EINTR? /jsks diff --git a/Src/Modules/socket.c b/Src/Modules/socket.c index cd56d46..92d0a50 100644 --- a/Src/Modules/socket.c +++ b/Src/Modules/socket.c @@ -191,8 +191,11 @@ bin_zsocket(char *nam, char **args, Options ops, UNUSED(int func)) } len = sizeof(soun); - if ((rfd = accept(lfd, (struct sockaddr *)&soun, &len)) == -1) - { + do { + rfd = accept(lfd, (struct sockaddr *)&soun, &len); + } while (errno == EINTR && !errflag); + + if (rfd == -1) { zwarnnam(nam, "could not accept connection: %e", errno); return 1; } diff --git a/Src/Modules/tcp.c b/Src/Modules/tcp.c index d5b62a8..3049273 100644 --- a/Src/Modules/tcp.c +++ b/Src/Modules/tcp.c @@ -536,8 +536,11 @@ bin_ztcp(char *nam, char **args, Options ops, UNUSED(int func)) sess = zts_alloc(ZTCP_INBOUND); len = sizeof(sess->peer.in); - if ((rfd = accept(lfd, (struct sockaddr *)&sess->peer.in, &len)) == -1) - { + do { + rfd = accept(lfd, (struct sockaddr *)&sess->peer.in, &len); + } while (errno == EINTR && !errflag); + + if (rfd == -1) { zwarnnam(nam, "could not accept connection: %e", errno); tcp_close(sess); return 1;