| 764 | } |
| 765 | |
| 766 | static int poll_until(int fd, short events, uint64_t deadline_ms) { |
| 767 | for (;;) { |
| 768 | struct pollfd descriptor = {.fd = fd, .events = events, .revents = 0}; |
| 769 | int timeout_ms = deadline_ms == UINT64_MAX ? -1 : deadline_remaining_ms(deadline_ms); |
| 770 | int result = poll(&descriptor, 1, timeout_ms); |
| 771 | if (result > 0) { |
| 772 | if ((descriptor.revents & events) != 0) { |
| 773 | return 1; |
| 774 | } |
| 775 | return -1; |
| 776 | } |
| 777 | if (result == 0) { |
| 778 | return 0; |
| 779 | } |
| 780 | if (errno != EINTR) { |
| 781 | return -1; |
| 782 | } |
| 783 | } |
| 784 | } |
| 785 | |
| 786 | static bool socket_peer_is_current_user(int fd) { |
| 787 | #if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) |
no test coverage detected