Date: Fri, 11 Jan 2019 03:50:52 +0000 (UTC) From: Mark Johnston <markj@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r342929 - in stable/12: lib/libc/sys sys/kern sys/netinet sys/ofed/drivers/infiniband/ulp/sdp Message-ID: <201901110350.x0B3oqKF064561@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: markj Date: Fri Jan 11 03:50:51 2019 New Revision: 342929 URL: https://svnweb.freebsd.org/changeset/base/342929 Log: MFC r342768: Support MSG_DONTWAIT in send*(2). Modified: stable/12/lib/libc/sys/send.2 stable/12/sys/kern/uipc_socket.c stable/12/sys/netinet/sctp_output.c stable/12/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c Directory Properties: stable/12/ (props changed) Modified: stable/12/lib/libc/sys/send.2 ============================================================================== --- stable/12/lib/libc/sys/send.2 Fri Jan 11 02:53:46 2019 (r342928) +++ stable/12/lib/libc/sys/send.2 Fri Jan 11 03:50:51 2019 (r342929) @@ -28,7 +28,7 @@ .\" From: @(#)send.2 8.2 (Berkeley) 2/21/94 .\" $FreeBSD$ .\" -.Dd August 19, 2018 +.Dd January 4, 2019 .Dt SEND 2 .Os .Sh NAME @@ -121,7 +121,8 @@ argument may include one or more of the following: .Bd -literal #define MSG_OOB 0x00001 /* process out-of-band data */ #define MSG_DONTROUTE 0x00004 /* bypass routing, use direct interface */ -#define MSG_EOR 0x00008 /* data completes record */ +#define MSG_EOR 0x00008 /* data completes record */ +#define MSG_DONTWAIT 0x00080 /* do not block */ #define MSG_EOF 0x00100 /* data completes transaction */ #define MSG_NOSIGNAL 0x20000 /* do not generate SIGPIPE on EOF */ .Ed @@ -138,6 +139,9 @@ data. .Dv MSG_EOR is used to indicate a record mark for protocols which support the concept. +The +.Dv MSG_DONTWAIT +flag request the call to return when it would block otherwise. .Dv MSG_EOF requests that the sender side of a socket be shut down, and that an appropriate indication be sent at the end of the specified data; @@ -201,8 +205,9 @@ An invalid user space address was specified for an arg The socket requires that message be sent atomically, and the size of the message to be sent made this impossible. .It Bq Er EAGAIN -The socket is marked non-blocking and the requested operation -would block. +The socket is marked non-blocking, or +.Dv MSG_DONTWAIT +is specified, and the requested operation would block. .It Bq Er ENOBUFS The system was unable to allocate an internal buffer. The operation may succeed when buffers become available. Modified: stable/12/sys/kern/uipc_socket.c ============================================================================== --- stable/12/sys/kern/uipc_socket.c Fri Jan 11 02:53:46 2019 (r342928) +++ stable/12/sys/kern/uipc_socket.c Fri Jan 11 03:50:51 2019 (r342929) @@ -1522,7 +1522,8 @@ restart: } if (space < resid + clen && (atomic || space < so->so_snd.sb_lowat || space < clen)) { - if ((so->so_state & SS_NBIO) || (flags & MSG_NBIO)) { + if ((so->so_state & SS_NBIO) || + (flags & (MSG_NBIO | MSG_DONTWAIT)) != 0) { SOCKBUF_UNLOCK(&so->so_snd); error = EWOULDBLOCK; goto release; Modified: stable/12/sys/netinet/sctp_output.c ============================================================================== --- stable/12/sys/netinet/sctp_output.c Fri Jan 11 02:53:46 2019 (r342928) +++ stable/12/sys/netinet/sctp_output.c Fri Jan 11 03:50:51 2019 (r342929) @@ -12832,7 +12832,7 @@ sctp_lower_sosend(struct socket *so, } } if (SCTP_SO_IS_NBIO(so) - || (flags & MSG_NBIO) + || (flags & (MSG_NBIO | MSG_DONTWAIT)) != 0 ) { non_blocking = 1; } Modified: stable/12/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c ============================================================================== --- stable/12/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c Fri Jan 11 02:53:46 2019 (r342928) +++ stable/12/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c Fri Jan 11 03:50:51 2019 (r342929) @@ -1124,7 +1124,8 @@ restart: } if (space < resid && (atomic || space < so->so_snd.sb_lowat)) { - if ((so->so_state & SS_NBIO) || (flags & MSG_NBIO)) { + if ((so->so_state & SS_NBIO) || + (flags & (MSG_NBIO | MSG_DONTWAIT)) != 0) { SOCKBUF_UNLOCK(&so->so_snd); error = EWOULDBLOCK; goto release;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201901110350.x0B3oqKF064561>