-------------------------------------------------------------------------*\ * Read with timeout * See note for socket_write \*-------------------------------------------------------------------------*/
| 339 | * See note for socket_write |
| 340 | \*-------------------------------------------------------------------------*/ |
| 341 | int socket_read(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm) { |
| 342 | int err; |
| 343 | *got = 0; |
| 344 | if (*ps == SOCKET_INVALID) return IO_CLOSED; |
| 345 | for ( ;; ) { |
| 346 | long taken = (long) read(*ps, data, count); |
| 347 | if (taken > 0) { |
| 348 | *got = taken; |
| 349 | return IO_DONE; |
| 350 | } |
| 351 | err = errno; |
| 352 | if (taken == 0) return IO_CLOSED; |
| 353 | if (err == EINTR) continue; |
| 354 | if (err != EAGAIN) return err; |
| 355 | if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err; |
| 356 | } |
| 357 | return IO_UNKNOWN; |
| 358 | } |
| 359 | |
| 360 | /*-------------------------------------------------------------------------*\ |
| 361 | * Put socket into blocking mode |
nothing calls this directly
no test coverage detected