Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Nov 1998 13:03:36 -0500 (EST)
From:      HighWind Software Information <info@highwind.com>
To:        mike@smith.net.au
Cc:        current@FreeBSD.ORG
Subject:   Re: Resend
Message-ID:  <199811251803.NAA02326@highwind.com>
In-Reply-To: <199811251734.JAA01096@dingo.cdrom.com> (message from Mike Smith on Wed, 25 Nov 1998 09:34:33 -0800)

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

>   > I'm trying to track a problem where a "write()" to a socket
>   > sends the beginning of the data over and over.
>   > 
>   > I'm looking at "sosend()" in uipc_socket.c, a comment says:
>   > 
>   > > * Returns nonzero on error, timeout or signal; callers
>   > > * must check for short counts if EINTR/ERESTART are returned.
>   > > * Data and control buffers are freed on return.
>   > 
>   > However, I don't see anywhere in the code where it returns
>   > EINTR/ERESTART.  That is, if this code mistakenly loops when it gets
>   > interrupted or does a partial write(), it would result in the behavior
>   > I am seeing.

>   The sblock() macro can return this.

Really???

#define sblock(sb, wf) ((sb)->sb_flags & SB_LOCK ? \
		(((wf) == M_WAITOK) ? sb_lock(sb) : EWOULDBLOCK) : \
		((sb)->sb_flags |= SB_LOCK), 0)

That doesn't look like it. Did I miss something?

>   You'll also get this behaviour if the socket is nonblocking and you 
>   only make a partial write, but forget to update your buffer pointer/
>   count before calling write() again.

True. But, my reading of the libc_r write() code looks like it handles
this perfectly. Maybe I missed something. On the outside, the descriptors
are blocking, John Birrell's libc_r code loops and handles this correctly.

I haven't been able to find any problems with that code. Maybe I missed
something. It is in "lib/libc_r/uthread/uthread_write.c"

-Rob


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



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