Does FreeBSD have sendmmsg or recvmmsg system calls?

Luigi Rizzo rizzo at
Tue Jan 26 18:14:26 UTC 2016

On Tue, Jan 26, 2016 at 9:25 AM, Gary Jennejohn <gljennjohn at> wrote:
> On Tue, 26 Jan 2016 09:06:39 -0800
> Luigi Rizzo <rizzo at> wrote:
>> On Tue, Jan 26, 2016 at 5:40 AM, Konstantin Belousov
>> <kostikbel at> wrote:
>> > On Mon, Jan 25, 2016 at 11:22:13AM +0200, Boris Astardzhiev wrote:
>> >> +ssize_t
>> >> +recvmmsg(int s, struct mmsghdr *__restrict msgvec, size_t vlen, int flags,
>> >> +    const struct timespec *__restrict timeout)
>> >> +{
>> >> +     size_t i, rcvd;
>> >> +     ssize_t ret;
>> >> +
>> >> +     if (timeout != NULL) {
>> >> +             fd_set fds;
>> >> +             int res;
>> > Please move all local definitions to the beginning of the function.
>> This style recommendation was from 30 years ago and is
>> bad programming practice, as it tends to complicate analysis
>> for the human and increase the chance of improper usage of
>> variables.
>> We should move away from this for new code.
> Really?  I personally find having all variables grouped together
> much easier to understand.  Stumbling across declarations in the
> middle of the code in a for-loop, for example, takes me by surprise.
> I also greatly dislike initializing variables in their declarations.
> Maybe I'm just old fashioned since I have been writing C-code for
> more than 30 years.

(sorry for the digression)

I am in the same ballpark in terms of coding age,
but systems have become a lot more
complex in that time window, code size generally exploded,
and compilers are smarter so they do not need hints from the
programmer on when to do initializations, or stack reuse or
register allocations.

I find that reducing the scope of variables helps a lot
understanding third party code (e.g. where information belongs to)
and reduces the chance of misuse (such as, leaking information
from the body of a loop).

About initializers in declarations, I think the rule should be
"use good judgement and privilege readability".

E.g., do postpone initialization if the first use is 20 lines down,
so that it is clear what the value is by the time you use
the variable; or when there is some complex condition to check,
as writing it as a conditional expression may be ugly and
cause code duplication and lead to poor error handling.

But when the first use is close to the declaration, splitting
the initialization is just unnecessary source bloat.


> --
> Gary Jennejohn

 Prof. Luigi RIZZO, rizzo at  . Dip. di Ing. dell'Informazione        . Universita` di Pisa
 TEL      +39-050-2217533               . via Diotisalvi 2
 Mobile   +39-338-6809875               . 56122 PISA (Italy)

More information about the freebsd-threads mailing list