readip() doesn't, at the moment, properly indicate to callers that it's timed out. One can tell that it's timed out if errno == EAGAIN when it returns, but this is not ideal. Restructure it a little bit to explicitly set errno to ETIMEDOUT if we've exhausted `tleft`.
I found two places that care about where it timed out or not: sendrecv in net.c and sendrecv_tftp. Both are structured to pass smaller timeout values to readip while tracking a larger timeout. Neither of them were able to do this properly with readip not indicating ETIMEDOUT, so fix it.
While here, straighten out the time usage in sendrecv_tftp. t/t1 were used inconsistently in the send part of the loop and not reset before we start the recv part, so they didn't indicate total receive time but total time overall.