tcp: Attempt to mitigate EPOLLRDHUP storms with half-closed connections
Link: https://github.com/containers/podman/issues/23686
This commit is contained in:
parent
232e12529e
commit
026fb71d1d
1 changed files with 8 additions and 4 deletions
12
tcp.c
12
tcp.c
|
@ -424,23 +424,27 @@ int tcp_set_peek_offset(int s, int offset)
|
|||
*/
|
||||
static uint32_t tcp_conn_epoll_events(uint8_t events, uint8_t conn_flags)
|
||||
{
|
||||
uint32_t rdhup;
|
||||
|
||||
if (!events)
|
||||
return 0;
|
||||
|
||||
rdhup = (events & SOCK_FIN_RCVD) ? 0 : EPOLLRDHUP;
|
||||
|
||||
if (events & ESTABLISHED) {
|
||||
if (events & TAP_FIN_SENT)
|
||||
return EPOLLET;
|
||||
|
||||
if (conn_flags & STALLED)
|
||||
return EPOLLIN | EPOLLOUT | EPOLLRDHUP | EPOLLET;
|
||||
return EPOLLIN | EPOLLOUT | rdhup | EPOLLET;
|
||||
|
||||
return EPOLLIN | EPOLLRDHUP;
|
||||
return EPOLLIN | rdhup;
|
||||
}
|
||||
|
||||
if (events == TAP_SYN_RCVD)
|
||||
return EPOLLOUT | EPOLLET | EPOLLRDHUP;
|
||||
return EPOLLOUT | EPOLLET | rdhup;
|
||||
|
||||
return EPOLLRDHUP;
|
||||
return rdhup;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue