diff options
author | krw <krw@openbsd.org> | 2014-07-12 20:16:38 +0000 |
---|---|---|
committer | krw <krw@openbsd.org> | 2014-07-12 20:16:38 +0000 |
commit | 1203692fe74ee36a401ce2981c6007c6158ae978 (patch) | |
tree | 3b379df73fd0f9e155ad47076e16b00604fd54dd /usr.sbin/ospfd/rde.c | |
parent | Protect the freelists of transfer descriptors with the appropriate spl (diff) | |
download | wireguard-openbsd-1203692fe74ee36a401ce2981c6007c6158ae978.tar.xz wireguard-openbsd-1203692fe74ee36a401ce2981c6007c6158ae978.zip |
Close connections when msgbuf_write() returns 0.
ok claudio@
Diffstat (limited to 'usr.sbin/ospfd/rde.c')
-rw-r--r-- | usr.sbin/ospfd/rde.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/usr.sbin/ospfd/rde.c b/usr.sbin/ospfd/rde.c index 2441639b5b5..c1fa9f5e8c3 100644 --- a/usr.sbin/ospfd/rde.c +++ b/usr.sbin/ospfd/rde.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rde.c,v 1.95 2013/11/13 20:43:00 benno Exp $ */ +/* $OpenBSD: rde.c,v 1.96 2014/07/12 20:16:38 krw Exp $ */ /* * Copyright (c) 2004, 2005 Claudio Jeker <claudio@openbsd.org> @@ -261,8 +261,10 @@ rde_dispatch_imsg(int fd, short event, void *bula) shut = 1; } if (event & EV_WRITE) { - if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN) + if ((n = msgbuf_write(&ibuf->w)) == -1 && errno != EAGAIN) fatal("msgbuf_write"); + if (n == 0) /* connection closed */ + shut = 1; } clock_gettime(CLOCK_MONOTONIC, &tp); @@ -624,8 +626,10 @@ rde_dispatch_parent(int fd, short event, void *bula) shut = 1; } if (event & EV_WRITE) { - if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN) + if ((n = msgbuf_write(&ibuf->w)) == -1 && errno != EAGAIN) fatal("msgbuf_write"); + if (n == 0) /* connection closed */ + shut = 1; } for (;;) { |