aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2026-01-20 12:09:47 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2026-01-27 00:44:03 +0000
commitd47c1c2cf562a7583758387cd652e98b91ab83f6 (patch)
treec0ef97832689dde2f8f233bcd360369d31a0b73e
parent69de2b4e96794793f04d1b323d354fcde3c480f6 (diff)
sbin/setkey: add -Z option to disable receive timeouts
Sponsored by: NVidia networking MFC after: 1 week
-rw-r--r--sbin/setkey/setkey.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/sbin/setkey/setkey.c b/sbin/setkey/setkey.c
index f7268d8f1e10..3caf83c8eebc 100644
--- a/sbin/setkey/setkey.c
+++ b/sbin/setkey/setkey.c
@@ -86,6 +86,7 @@ static int f_policy = 0;
static int f_hexdump = 0;
static int f_tflag = 0;
static int f_scope = 0;
+static int f_notimeout = 0;
static time_t thiszone;
extern int lineno;
@@ -129,7 +130,7 @@ main(int ac, char **av)
thiszone = gmt2local(0);
- while ((c = getopt(ac, av, "acde:f:ghltvxDFP")) != -1) {
+ while ((c = getopt(ac, av, "abcde:f:ghltvxDFPZ")) != -1) {
switch (c) {
case 'c':
f_mode = MODE_SCRIPT;
@@ -187,6 +188,9 @@ main(int ac, char **av)
case 'v':
f_verbose = 1;
break;
+ case 'Z':
+ f_notimeout = 1;
+ break;
default:
usage();
/*NOTREACHED*/
@@ -332,16 +336,18 @@ sendkeymsg(char *buf, size_t len)
u_char rbuf[1024 * 32]; /* XXX: Enough ? Should I do MSG_PEEK ? */
ssize_t l;
struct sadb_msg *msg;
-
- {
struct timeval tv;
- tv.tv_sec = 1;
- tv.tv_usec = 0;
- if (setsockopt(so, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) < 0) {
- perror("setsockopt");
- goto end;
+
+
+ if (!f_notimeout) {
+ tv.tv_sec = 1;
+ tv.tv_usec = 0;
+ if (setsockopt(so, SOL_SOCKET, SO_RCVTIMEO, &tv,
+ sizeof(tv)) < 0) {
+ perror("setsockopt");
+ goto end;
+ }
}
- }
if (f_forever)
shortdump_hdr();