tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: short reads on unix stream on netbsd-10
On Wed, Sep 06, 2023 at 09:28:31AM -0400, Mouse wrote:
> > serv_input: read@3 need 468 got 396 (and disconnects).
>
> > The code is:
> > if (i != (nchars = read(fd, T.c, i))) {
> > fprintf(stderr, "serv_input: read@%d need %d got %d\n",
> > fd, i, nchars);
> > server_died();
> > }
>
> > fd 3 is a unix stream socket
> > I didn't find any place where this file descriptor could have been
> > put to nonblocking.
>
> > I could wrap the read in a loop to work around this, but I wonder if
> > it's expected behavior to get short reads in this case ?
>
> That's a good question. In general, SOCK_STREAM socket connections
> never promise atomicity of anything larger than one byte. It's
> possible AF_LOCAL provides a stronger promise, but, if so, I'm not sure
> where that promise is documented, or how widespread it is.
>
> As for it being _expected_ behaviour...I wouldn't call it "expected",
> exactly, but I would call it "not particularly surprising".
>
> So, I'd say the code you quote is at fault here.
thanks. I remplaced the read with a poll()/read() loop; this fixes the issue.
--
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
NetBSD: 26 ans d'experience feront toujours la difference
--
Home |
Main Index |
Thread Index |
Old Index