tcp: Don't reset connection from ESTABLISHED state on EPOLLHUP
That might just mean we shut down the socket -- but we still have to go through the other states to ensure a orderly shutdown guest-side. While at it, drop the EPOLLHUP check for unhandled states: we should never hit that, but if we do, resetting the connection at that point is probably the wrong thing to do. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
parent
62bace390b
commit
9b6769d53b
1 changed files with 1 additions and 6 deletions
7
tcp.c
7
tcp.c
|
@ -2825,9 +2825,7 @@ void tcp_sock_handler(struct ctx *c, union epoll_ref ref, uint32_t events,
|
||||||
case ESTABLISHED_SOCK_FIN_SENT:
|
case ESTABLISHED_SOCK_FIN_SENT:
|
||||||
case ESTABLISHED:
|
case ESTABLISHED:
|
||||||
tcp_data_from_sock(c, conn, now);
|
tcp_data_from_sock(c, conn, now);
|
||||||
if (events & EPOLLHUP) {
|
if (events & EPOLLRDHUP) {
|
||||||
tcp_rst(c, conn);
|
|
||||||
} else if (events & EPOLLRDHUP) {
|
|
||||||
if (conn->state == ESTABLISHED)
|
if (conn->state == ESTABLISHED)
|
||||||
tcp_tap_state(conn, ESTABLISHED_SOCK_FIN);
|
tcp_tap_state(conn, ESTABLISHED_SOCK_FIN);
|
||||||
tcp_data_from_sock(c, conn, now);
|
tcp_data_from_sock(c, conn, now);
|
||||||
|
@ -2870,9 +2868,6 @@ void tcp_sock_handler(struct ctx *c, union epoll_ref ref, uint32_t events,
|
||||||
case CLOSED:
|
case CLOSED:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (events & EPOLLHUP)
|
|
||||||
tcp_rst(c, conn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue