9111 libstand: Fix IP recv timeout

Review Request #860 - Created Feb. 14, 2018 and submitted

Information
Toomas Soome
illumos-gate
9111
8d7fcb7...
Reviewers
general
https://svnweb.freebsd.org/base?view=revision&revision=329264

readip() doesn't, at the moment, properly indicate to callers that it has
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 (t/t1) usage in sendrecv_tftp.

This would have manifested itself in periodic failures to NFS/TFTP boot for
no apparent reason because MINTMO/MAXTMO were not actually being respected
properly. Problems were not reported with NFS, only TFTP.

Reported by:	sbruno
Reviewed by:	sbruno, tsoome
MFC after:	3 days
Differential Revision:	https://reviews.freebsd.org/D14350

  
Yuri Pankov
Andy Fiddaman
Toomas Soome
Review request changed

Status: Closed (submitted)

Loading...