Does FreeBSD have sendmmsg or recvmmsg system calls?

Gary Jennejohn gljennjohn at gmail.com
Wed Jan 27 00:31:50 UTC 2016


On Tue, 26 Jan 2016 17:46:52 -0500 (EST)
Daniel Eischen <deischen at freebsd.org> wrote:

> On Tue, 26 Jan 2016, Gary Jennejohn wrote:
> 
> > On Tue, 26 Jan 2016 09:06:39 -0800
> > Luigi Rizzo <rizzo at iet.unipi.it> wrote:
> >  
> >> On Tue, Jan 26, 2016 at 5:40 AM, Konstantin Belousov
> >> <kostikbel at gmail.com> 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.  
> 
> +1
> 
> Probably should be discouraged, but allowed on a case-by-case
> basis.  One could argue that if you need to declaration blocks
> in the middle of code, then that code is too complex and should
> be broken out into a separate function.
> 

Right.

And code like this

int func(void)
{
  int baz, zot;
  [some more code]
  if (zot < 5)
  {
    int baz = 3;
    [more code]
  }
  [some more code]
}

is even worse.  The compiler (clang) seems to consider this to
merely be a reinitialization of baz, but a human might be confused.

Something like for (int i = 0; i < 2; i++) is IMHO OK.

-- 
Gary Jennejohn


More information about the freebsd-threads mailing list