Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Jun 2001 15:20:58 -0700 (PDT)
From:      Matt Dillon <dillon@earth.backplane.com>
To:        Graham Barr <gbarr@pobox.com>
Cc:        freebsd-hackers@FreeBSD.ORG
Subject:   Re: read(2) and ETIMEDOUT
Message-ID:  <200106072220.f57MKwv78170@earth.backplane.com>
References:  <20010607171501.S50444@pobox.com> <200106071653.f57Grsn73369@earth.backplane.com> <20010607180011.U50444@pobox.com> <200106071733.f57HXov74249@earth.backplane.com> <20010607183535.X50444@pobox.com>

next in thread | previous in thread | raw e-mail | index | archive | help

:
:On Thu, Jun 07, 2001 at 10:33:50AM -0700, Matt Dillon wrote:
:> 
:> :
:> :Thanks, I will try setting errno, but I don't think it is signals.
:> :I have been running truss on the process. The relevant part is
:> :
:> :gettimeofday(0xbfbffa54,0x0)                     = 0 (0x0)
:> :select(0x50,0x93f8c90,0x0,0x0,0xbfbffa74)        = 3 (0x3)
:> :read(0x16,0xa2da000,0x8000)                      ERR#60 'Operation timed out'
:> :
:> :In fact there are no signals in the whole truss output
:> :
:> :Graham.
:> 
:>     What type of descriptor is the read being performed on?  A TCP
:>     connection or, say, a reading a file over NFS?  
:
:It is a TCP/IP connection.
:
:Graham.

    You can get this if the TCP connection times out, either through a
    keepalive timeout or the protocol hits the maximum number of transmit
    retries.  I'd have to delve into the cvs logs to see when it was added,
    but it seems reasonable.  You should treat it simply as an EIO or
    something like that.

    Generally speaking you should handle return codes from system calls by
    handling the codes you know about and simply assuming that anything else
    is fatal to the particular connection.

	if (systemcall(...) < 0) {
	    switch(errno) {
	    case EINTR:
	    case EAGAIN:
		... deal with non-blocking situations ...
	    .
	    .
	    .
	    default:
		... assume everything else is a fatal error on the socket ...
		... close the descriptor and cleanup its state ...
	    }
	}

    This gives you the maximum portability between platforms and between
    releases.

						-Matt


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200106072220.f57MKwv78170>