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