summaryrefslogtreecommitdiff
path: root/regress
diff options
context:
space:
mode:
authortobias <tobias@openbsd.org>2015-03-26 21:22:50 +0000
committerDamien Miller <djm@mindrot.org>2020-05-29 14:47:50 +1000
commitd6a81050ace2630b06c3c6dd39bb4eef5d1043f8 (patch)
treec595ab2e2e47c021ffdf4c3711fc30118d58f6d2 /regress
parentbf3893dddd35e16def04bf48ed2ee1ad695b8f82 (diff)
partial sync of regress/netcat.c with upstream
The code in socks.c writes multiple times in a row to a socket. If the socket becomes invalid between these calls (e.g. connection closed), write will throw SIGPIPE. With this patch, SIGPIPE is ignored so we can handle write's -1 return value (errno will be EPIPE). Ultimately, it leads to program exit, too -- but with nicer error message. :) with input by and ok djm
Diffstat (limited to 'regress')
-rw-r--r--regress/netcat.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/regress/netcat.c b/regress/netcat.c
index 30e49ac01..dff2364cc 100644
--- a/regress/netcat.c
+++ b/regress/netcat.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: netcat.c,v 1.128 2015/03/26 10:36:03 tobias Exp $ */ 1/* $OpenBSD: netcat.c,v 1.129 2015/03/26 21:22:50 tobias Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> 3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org>
4 * 4 *
@@ -44,14 +44,15 @@
44#include <netinet/ip.h> 44#include <netinet/ip.h>
45 45
46#include <errno.h> 46#include <errno.h>
47#include <fcntl.h>
48#include <limits.h>
47#include <netdb.h> 49#include <netdb.h>
50#include <signal.h>
48#include <stdarg.h> 51#include <stdarg.h>
49#include <stdio.h> 52#include <stdio.h>
50#include <stdlib.h> 53#include <stdlib.h>
51#include <string.h> 54#include <string.h>
52#include <unistd.h> 55#include <unistd.h>
53#include <fcntl.h>
54#include <limits.h>
55#include "atomicio.h" 56#include "atomicio.h"
56 57
57#ifdef HAVE_POLL_H 58#ifdef HAVE_POLL_H
@@ -162,6 +163,8 @@ main(int argc, char *argv[])
162 uport = NULL; 163 uport = NULL;
163 sv = NULL; 164 sv = NULL;
164 165
166 signal(SIGPIPE, SIG_IGN);
167
165 while ((ch = getopt(argc, argv, 168 while ((ch = getopt(argc, argv,
166 "46DdFhI:i:klNnO:P:p:rSs:tT:UuV:vw:X:x:z")) != -1) { 169 "46DdFhI:i:klNnO:P:p:rSs:tT:UuV:vw:X:x:z")) != -1) {
167 switch (ch) { 170 switch (ch) {