diff options
| author | Gleb Smirnoff <glebius@FreeBSD.org> | 2024-01-16 20:00:36 +0000 |
|---|---|---|
| committer | Gleb Smirnoff <glebius@FreeBSD.org> | 2024-01-16 20:02:59 +0000 |
| commit | 296a4cb5c5b18f82da7a365d9f209cb9fc09003b (patch) | |
| tree | 284a591b45b8438c5dc505e60e15bbcdd8d2790e /sys/netipsec | |
| parent | 61a0eaca0dd7de0c08b46c986aee345922c804f0 (diff) | |
Diffstat (limited to 'sys/netipsec')
| -rw-r--r-- | sys/netipsec/keysock.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/sys/netipsec/keysock.c b/sys/netipsec/keysock.c index 18bbdae316f0..d9297d44c18a 100644 --- a/sys/netipsec/keysock.c +++ b/sys/netipsec/keysock.c @@ -310,9 +310,24 @@ key_detach(struct socket *so) } static int -key_shutdown(struct socket *so) +key_shutdown(struct socket *so, enum shutdown_how how) { - socantsendmore(so); + /* + * Note: key socket marks itself as connected through its lifetime. + */ + switch (how) { + case SHUT_RD: + socantrcvmore(so); + sbrelease(so, SO_RCV); + break; + case SHUT_RDWR: + socantrcvmore(so); + sbrelease(so, SO_RCV); + /* FALLTHROUGH */ + case SHUT_WR: + socantsendmore(so); + } + return (0); } |
