diff options
author | haesbaert <> | 2012-07-07 15:33:02 +0000 |
---|---|---|
committer | haesbaert <> | 2012-07-07 15:33:02 +0000 |
commit | 995c38cd464be88005853d62d9c8ac2d96f6dfe1 (patch) | |
tree | 9783115d4fc4eeb94c551ef60f301694559dcb99 /src/usr.bin/nc/netcat.c | |
parent | 335848c28f31358ed46e5bf33f2fe93200fa4672 (diff) | |
download | openbsd-995c38cd464be88005853d62d9c8ac2d96f6dfe1.tar.gz openbsd-995c38cd464be88005853d62d9c8ac2d96f6dfe1.tar.bz2 openbsd-995c38cd464be88005853d62d9c8ac2d96f6dfe1.zip |
Allow UDP server to receive datagrams from multiple socket pairs with -k
flag. Prompted by a question from dsp at 2f30 dot org, diff from Lazarom
Koromil with a few tweaks by me, many thanks.
ok mikeb@ nicm@ haesbaert@
Diffstat (limited to 'src/usr.bin/nc/netcat.c')
-rw-r--r-- | src/usr.bin/nc/netcat.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/usr.bin/nc/netcat.c b/src/usr.bin/nc/netcat.c index 4bef71a7ca..a034bbab8c 100644 --- a/src/usr.bin/nc/netcat.c +++ b/src/usr.bin/nc/netcat.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: netcat.c,v 1.108 2012/07/07 09:36:30 haesbaert Exp $ */ | 1 | /* $OpenBSD: netcat.c,v 1.109 2012/07/07 15:33:02 haesbaert Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> | 3 | * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> |
4 | * | 4 | * |
@@ -345,11 +345,17 @@ main(int argc, char *argv[]) | |||
345 | if (s < 0) | 345 | if (s < 0) |
346 | err(1, NULL); | 346 | err(1, NULL); |
347 | /* | 347 | /* |
348 | * For UDP, we will use recvfrom() initially | 348 | * For UDP and -k, don't connect the socket, let it |
349 | * to wait for a caller, then use the regular | 349 | * receive datagrams from multiple socket pairs. |
350 | * functions to talk to the caller. | ||
351 | */ | 350 | */ |
352 | if (uflag) { | 351 | if (uflag && kflag) |
352 | readwrite(s); | ||
353 | /* | ||
354 | * For UDP and not -k, we will use recvfrom() initially | ||
355 | * to wait for a caller, then use the regular functions | ||
356 | * to talk to the caller. | ||
357 | */ | ||
358 | else if (uflag && !kflag) { | ||
353 | int rv, plen; | 359 | int rv, plen; |
354 | char buf[16384]; | 360 | char buf[16384]; |
355 | struct sockaddr_storage z; | 361 | struct sockaddr_storage z; |