diff options
author | jlemon <jlemon@FreeBSD.org> | 2001-02-23 21:07:06 +0000 |
---|---|---|
committer | jlemon <jlemon@FreeBSD.org> | 2001-02-23 21:07:06 +0000 |
commit | fde6b04ed51d273a4eebdeeac49378e61d15a1c4 (patch) | |
tree | c8ca8a71bb2ec72ee6e3471556f629fbf5bb2605 /sys/netinet/tcp_timewait.c | |
parent | ee6eb4ed42527cfd88e069a9c3c80f5b69c3c78b (diff) | |
download | FreeBSD-src-fde6b04ed51d273a4eebdeeac49378e61d15a1c4.zip FreeBSD-src-fde6b04ed51d273a4eebdeeac49378e61d15a1c4.tar.gz |
When converting soft error into a hard error, drop the connection. The
error will be passed up to the user, who will close the connection, so
it does not appear to make a sense to leave the connection open.
This also fixes a bug with kqueue, where the filter does not set EOF
on the connection, because the connection is still open.
Also remove calls to so{rw}wakeup, as we aren't doing anything with
them at the moment anyway.
Reviewed by: alfred, jesper
Diffstat (limited to 'sys/netinet/tcp_timewait.c')
-rw-r--r-- | sys/netinet/tcp_timewait.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c index b58005d..c150597 100644 --- a/sys/netinet/tcp_timewait.c +++ b/sys/netinet/tcp_timewait.c @@ -752,14 +752,16 @@ tcp_drain() * Notify a tcp user of an asynchronous error; * store error as soft error, but wake up user * (for now, won't do anything until can select for soft error). + * + * Do not wake up user since there currently is no mechanism for + * reporting soft errors (yet - a kqueue filter may be added). */ static void tcp_notify(inp, error) struct inpcb *inp; int error; { - register struct tcpcb *tp = (struct tcpcb *)inp->inp_ppcb; - register struct socket *so = inp->inp_socket; + struct tcpcb *tp = (struct tcpcb *)inp->inp_ppcb; /* * Ignore some errors if we are hooked up. @@ -774,12 +776,14 @@ tcp_notify(inp, error) return; } else if (tp->t_state < TCPS_ESTABLISHED && tp->t_rxtshift > 3 && tp->t_softerror) - so->so_error = error; + tcp_drop(tp, error); else tp->t_softerror = error; +#if 0 wakeup((caddr_t) &so->so_timeo); sorwakeup(so); sowwakeup(so); +#endif } static int |