| 109 | |
| 110 | if hasattr(select, 'poll'): |
| 111 | def _select_imp(readers=None, writers=None, err=None, timeout=0, |
| 112 | poll=select.poll, POLLIN=select.POLLIN, |
| 113 | POLLOUT=select.POLLOUT, POLLERR=select.POLLERR): |
| 114 | poller = poll() |
| 115 | register = poller.register |
| 116 | fd_to_mask = {} |
| 117 | |
| 118 | if readers: |
| 119 | for fd in map(_ensure_integral_fd, readers): |
| 120 | fd_to_mask[fd] = fd_to_mask.get(fd, 0) | POLLIN |
| 121 | if writers: |
| 122 | for fd in map(_ensure_integral_fd, writers): |
| 123 | fd_to_mask[fd] = fd_to_mask.get(fd, 0) | POLLOUT |
| 124 | if err: |
| 125 | for fd in map(_ensure_integral_fd, err): |
| 126 | fd_to_mask[fd] = fd_to_mask.get(fd, 0) | POLLERR |
| 127 | |
| 128 | for fd, event_mask in fd_to_mask.items(): |
| 129 | register(fd, event_mask) |
| 130 | |
| 131 | R, W = set(), set() |
| 132 | timeout = 0 if timeout and timeout < 0 else round(timeout * 1e3) |
| 133 | events = poller.poll(timeout) |
| 134 | for fd, event in events: |
| 135 | if event & POLLIN: |
| 136 | R.add(fd) |
| 137 | if event & POLLOUT: |
| 138 | W.add(fd) |
| 139 | if event & POLLERR: |
| 140 | R.add(fd) |
| 141 | return R, W, 0 |
| 142 | else: |
| 143 | def _select_imp(readers=None, writers=None, err=None, timeout=0): |
| 144 | r, w, e = select.select(readers, writers, err, timeout) |