On Fri, Sep 07, 2012 at 01:43:29PM +0900, UMEZAWA Takeshi wrote: > I have added send(2) MSG_DONTWAIT support, which enables us to choose > nonblocking or blocking for each send(2) call.
I think this diff is OK. Does anyone know why SS_NBIO and MSG_DONTWAIT are not used identically in sosend() and soreceive()? Especially locking the socket buffer sblock() with SS_NBIO is different in sosend() and soreceive(). Should't SS_NBIO and MSG_DONTWAIT be evaluated consistently everywhere? bluhm > diff --git a/lib/libc/sys/send.2 b/lib/libc/sys/send.2 > index d58588f..b3b8d93 100644 > --- a/lib/libc/sys/send.2 > +++ b/lib/libc/sys/send.2 > @@ -103,6 +103,8 @@ bypass routing, use direct interface > .It Dv MSG_NOSIGNAL > don't send > .Dv SIGPIPE > +.It Dv MSG_DONTWAIT > +don't block > .El > .Pp > The flag > diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c > index 653de7d..10ef153 100644 > --- a/sys/kern/uipc_socket.c > +++ b/sys/kern/uipc_socket.c > @@ -451,7 +451,7 @@ restart: > snderr(EMSGSIZE); > if (space < resid + clen && > (atomic || space < so->so_snd.sb_lowat || space < clen)) { > - if (so->so_state & SS_NBIO) > + if ((so->so_state & SS_NBIO) || (flags & MSG_DONTWAIT)) > snderr(EWOULDBLOCK); > sbunlock(&so->so_snd); > error = sbwait(&so->so_snd);