diff options
author | Tobias Stoeckmann <tobias@cvs.openbsd.org> | 2015-03-26 21:22:51 +0000 |
---|---|---|
committer | Tobias Stoeckmann <tobias@cvs.openbsd.org> | 2015-03-26 21:22:51 +0000 |
commit | 51f8a4febd5ae6b775fefce9dfddd834feb76a50 (patch) | |
tree | 737eb519cf0a88c3027e7494c751eb209cc6959f /usr.bin/nc | |
parent | 726cb5a03427dd7ac5877c28e4f3a68869c54fe0 (diff) |
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 'usr.bin/nc')
-rw-r--r-- | usr.bin/nc/netcat.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/usr.bin/nc/netcat.c b/usr.bin/nc/netcat.c index 88a2a25053f..905ae4ea6d9 100644 --- a/usr.bin/nc/netcat.c +++ b/usr.bin/nc/netcat.c @@ -1,4 +1,4 @@ -/* $OpenBSD: netcat.c,v 1.128 2015/03/26 10:36:03 tobias Exp $ */ +/* $OpenBSD: netcat.c,v 1.129 2015/03/26 21:22:50 tobias Exp $ */ /* * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> * @@ -44,15 +44,16 @@ #include <err.h> #include <errno.h> +#include <fcntl.h> +#include <limits.h> #include <netdb.h> #include <poll.h> +#include <signal.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> -#include <fcntl.h> -#include <limits.h> #include "atomicio.h" #ifndef SUN_LEN @@ -141,6 +142,8 @@ main(int argc, char *argv[]) uport = NULL; sv = NULL; + signal(SIGPIPE, SIG_IGN); + while ((ch = getopt(argc, argv, "46DdFhI:i:klNnO:P:p:rSs:tT:UuV:vw:X:x:z")) != -1) { switch (ch) { |