Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Nov 1996 18:58:11 -0800
From:      John Polstra <jdp@polstra.com>
To:        Karl Denninger <karl@Mcs.Net>
Cc:        scrappy@ki.net, jgreco@brasil.moneng.mei.com, hackers@FreeBSD.org
Subject:   Re: Sockets question... 
Message-ID:  <199611150258.SAA12064@austin.polstra.com>
In-Reply-To: Your message of "Thu, 14 Nov 1996 20:46:55 CST." <199611150246.UAA13803@Jupiter.Mcs.Net> 
References:  <199611150246.UAA13803@Jupiter.Mcs.Net> 

next in thread | previous in thread | raw e-mail | index | archive | help
> I have an application which sends a query to a back-end server -- and that
> server can return literally hundreds of KB of data in response.
> 
> On very long responses, it just STOPS.
> 
> The writing end thinks it wrote all of the data, netstat -an shows nothing
> in the socket buffers, the reader is waiting in read() for more data (it
> never saw the end marker, and in fact never saw more than half of the
> response!)

If the socket is not in non-blocking mode, and you do a write(2) of N
bytes to it, and the write call returns anything other than -1 or N,
then that is a bug.

If the sending socket returns N, but not all of the data gets to
the receiving socket, then that is either a bug or a network problem.

>From write(2):

     When using non-blocking I/O on objects such as sockets that are subject
		^^^^^^^^^^^^
     to flow control, write() and writev() may write fewer bytes than request-
     ed; the return value must be noted, and the remainder of the operation
     should be retried when possible.

OK, it doesn't come right out and say directly that it _won't_ do that
when using blocking I/O.  But that is the implication.  And it is the
historical behavior.  And it is the behavior that probably 90% of
network applications are written to expect.
--
   John Polstra                                       jdp@polstra.com
   John D. Polstra & Co., Inc.                Seattle, Washington USA
   "Self-knowledge is always bad news."                 -- John Barth



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