aboutgitcodebugslistschat
path: root/tcp.c
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2021-09-16 08:42:45 +0200
committerStefano Brivio <sbrivio@redhat.com>2021-09-16 08:50:02 +0200
commit9b6769d53b20933d593a12c4a267b10c48b214d6 (patch)
treeceed00d0af1964ec588d36db6bba53f019e7c33b /tcp.c
parent62bace390b34c00e37323fdddb05b3c79eaa4242 (diff)
downloadpasst-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.c7
1 files changed, 1 insertions, 6 deletions
diff --git a/tcp.c b/tcp.c
index 526032e..a40b03b 100644
--- a/tcp.c
+++ b/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:
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);
}
/**