--- a/sys/kern/uipc_syscalls.c +++ b/sys/kern/uipc_syscalls.c @@ -1005,6 +1005,13 @@ } error = so_pru_soreceive(so, sa, auio, NULL, control, flags); + /* + * MSG_FNONBLOCKING / MSG_FBLOCKING are kernel-internal force + * flags; strip them so they never leak into the user-visible + * msg_flags word. + */ + if (flags != NULL) + *flags &= ~(MSG_FNONBLOCKING | MSG_FBLOCKING); if (error) { if (auio->uio_resid != len && (error == ERESTART || error == EINTR || error == EWOULDBLOCK))