Fair. But it didn't actually work before. It's not clear anyone has ever used it.
On Mon, Jun 11, 2018 at 9:54 AM, Mark Johnston <ma...@freebsd.org> wrote: > On Mon, Jun 11, 2018 at 04:31:43PM +0000, Matt Macy wrote: >> Author: mmacy >> Date: Mon Jun 11 16:31:42 2018 >> New Revision: 334960 >> URL: https://svnweb.freebsd.org/changeset/base/334960 >> >> Log: >> soreceive_stream: correctly handle edge cases >> >> - non NULL controlp is not an error, returning EINVAL >> would cause X forwarding to fail >> >> - MSG_PEEK and MSG_WAITALL are fairly exceptional, but we still >> want to handle them - punt to soreceive_generic >> >> Modified: >> head/sys/kern/uipc_socket.c >> >> Modified: head/sys/kern/uipc_socket.c >> ============================================================================== >> --- head/sys/kern/uipc_socket.c Mon Jun 11 16:27:09 2018 >> (r334959) >> +++ head/sys/kern/uipc_socket.c Mon Jun 11 16:31:42 2018 >> (r334960) >> @@ -2162,7 +2162,6 @@ release: >> >> /* >> * Optimized version of soreceive() for stream (TCP) sockets. >> - * XXXAO: (MSG_WAITALL | MSG_PEEK) isn't properly handled. >> */ >> int >> soreceive_stream(struct socket *so, struct sockaddr **psa, struct uio *uio, >> @@ -2177,12 +2176,14 @@ soreceive_stream(struct socket *so, struct sockaddr >> ** >> return (EINVAL); >> if (psa != NULL) >> *psa = NULL; >> - if (controlp != NULL) >> - return (EINVAL); >> if (flagsp != NULL) >> flags = *flagsp &~ MSG_EOR; >> else >> flags = 0; >> + if (flags & (MSG_PEEK|MSG_WAITALL)) >> + return (soreceive_generic(so, psa, uio, mp0, controlp, >> flagsp)); >> + if (controlp != NULL) >> + *controlp = NULL; > > Now soreceive_stream() contains dead code to handle MSG_WAITALL, and a > bunch of always-true checks for both flags. > > Changes to this code should be reviewed. _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"