Taylor Brandstetter 3041eb21e9 Improve epoll error handling.
The main change is to remove sockets from epoll if there are no
requested events, which happens when a socket is considered closed
(due to an error or otherwise). This prevents a busy loop when a socket
is an error condition where it will constantly be signaled, but not
deleted by higher level code.

Other related changes:
* Set DE_CLOSE on errors regardless of whether the socket is readable or
  writable.
* Don't set DE_ACCEPT on errors.
* Handle getsockopt(SO_ERROR) errors.
* In IsDescriptorClosed:
  * Retry recv on EINTR.
  * Treat ECONNABORTED and EPIPE as errors.

Original patch contributed by andrey.semashev@gmail.com.

Bug: webrtc:11124
Change-Id: I67f33213efc1418b1ffc8f4867f606b7f8dc4ece
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/235863
Commit-Queue: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#35300}
2021-11-02 21:27:03 +00:00
..
2021-09-27 14:32:47 +00:00
2019-07-08 13:45:15 +00:00
2021-09-21 16:28:38 +00:00
2021-09-21 16:28:38 +00:00
2021-09-21 16:28:38 +00:00
2021-07-30 13:47:50 +00:00
2019-07-08 13:45:15 +00:00
2019-07-08 13:45:15 +00:00
2019-07-08 13:45:15 +00:00
2019-07-08 13:45:15 +00:00
2019-07-08 13:45:15 +00:00
2019-07-08 13:45:15 +00:00
2019-07-08 13:45:15 +00:00
2021-08-23 11:07:36 +00:00
2021-08-31 14:27:49 +00:00
2019-07-08 13:45:15 +00:00
2019-11-26 14:05:20 +00:00
2021-04-22 13:04:53 +00:00
2019-07-08 13:45:15 +00:00
2021-08-25 10:30:10 +00:00
2021-04-16 08:47:17 +00:00
2021-04-16 08:47:17 +00:00
2019-07-08 13:45:15 +00:00
2020-09-17 13:18:25 +00:00
2021-09-21 15:17:26 +00:00
2021-01-29 08:24:43 +00:00
2021-07-30 13:47:50 +00:00
2021-07-30 13:47:50 +00:00
2021-02-10 15:04:55 +00:00
2019-07-08 13:45:15 +00:00
2021-10-13 19:26:10 +00:00
2019-07-08 13:45:15 +00:00