-------------------------------------------------------------------------*\ * Accept with timeout \*-------------------------------------------------------------------------*/
| 183 | * Accept with timeout |
| 184 | \*-------------------------------------------------------------------------*/ |
| 185 | int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, p_timeout tm) { |
| 186 | if (*ps == SOCKET_INVALID) return IO_CLOSED; |
| 187 | for ( ;; ) { |
| 188 | int err; |
| 189 | if ((*pa = accept(*ps, addr, len)) != SOCKET_INVALID) return IO_DONE; |
| 190 | err = errno; |
| 191 | if (err == EINTR) continue; |
| 192 | if (err != EAGAIN && err != ECONNABORTED) return err; |
| 193 | if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err; |
| 194 | } |
| 195 | /* can't reach here */ |
| 196 | return IO_UNKNOWN; |
| 197 | } |
| 198 | |
| 199 | /*-------------------------------------------------------------------------*\ |
| 200 | * Send with timeout |
nothing calls this directly
no test coverage detected