diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2021-09-16 08:42:45 +0200 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2021-09-16 08:50:02 +0200 |
commit | 9b6769d53b20933d593a12c4a267b10c48b214d6 (patch) | |
tree | ceed00d0af1964ec588d36db6bba53f019e7c33b /tcp.c | |
parent | 62bace390b34c00e37323fdddb05b3c79eaa4242 (diff) | |
download | passt-9b6769d53b20933d593a12c4a267b10c48b214d6.tar passt-9b6769d53b20933d593a12c4a267b10c48b214d6.tar.gz passt-9b6769d53b20933d593a12c4a267b10c48b214d6.tar.bz2 passt-9b6769d53b20933d593a12c4a267b10c48b214d6.tar.lz passt-9b6769d53b20933d593a12c4a267b10c48b214d6.tar.xz passt-9b6769d53b20933d593a12c4a267b10c48b214d6.tar.zst passt-9b6769d53b20933d593a12c4a267b10c48b214d6.zip |
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>
Diffstat (limited to 'tcp.c')
-rw-r--r-- | tcp.c | 7 |
1 files changed, 1 insertions, 6 deletions
@@ -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: tcp_data_from_sock(c, conn, now); - if (events & EPOLLHUP) { - tcp_rst(c, conn); - } else if (events & EPOLLRDHUP) { + if (events & EPOLLRDHUP) { if (conn->state == ESTABLISHED) tcp_tap_state(conn, ESTABLISHED_SOCK_FIN); 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: break; } - - if (events & EPOLLHUP) - tcp_rst(c, conn); } /** |