Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Jan 2016 12:19:09 +0200
From:      Boris Astardzhiev <boris.astardzhiev@gmail.com>
To:        Kevin Oberman <rkoberman@gmail.com>
Cc:        Bruce Evans <brde@optusnet.com.au>, Gary Jennejohn <gljennjohn@gmail.com>,  Daniel Eischen <deischen@freebsd.org>, threads@freebsd.org,  Luigi Rizzo <rizzo@iet.unipi.it>, "freebsd-net@freebsd.org" <net@freebsd.org>
Subject:   Re: Does FreeBSD have sendmmsg or recvmmsg system calls?
Message-ID:  <CAP=KkTwqYLkUvd-7wiCWndvFQX4D3qw8q18LhxjofHQnUrKKXA@mail.gmail.com>
In-Reply-To: <CAP=KkTwEGVhKxSmZUDsq4hJ9K_nHrO9di1maS7zVn2CNX8TqAg@mail.gmail.com>
References:  <20160118140811.GW3942@kib.kiev.ua> <CAP=KkTzLCOnJVqt5F3ZuuZUiwkmWcne2Ynpi6-daE2jTzSBtfw@mail.gmail.com> <20160120073154.GB3942@kib.kiev.ua> <CAP=KkTx3dAUuSBrJiwNAAe%2BhHSG4j5Qp7sAcgtOgmVi8a12k1A@mail.gmail.com> <20160121093509.GK3942@kib.kiev.ua> <20160121233040.E1864@besplex.bde.org> <CAP=KkTw=ML=oPo2OgFfmor_nsL3om6HvmTQjKNMrOiU_dmWc2g@mail.gmail.com> <20160124050634.GS3942@kib.kiev.ua> <20160124100747.551f8e3f@ernst.home> <CAP=KkTyHG9Rb%2BnrDC1TDxzjUQFca9NkVp8Suo1c_-C00RUtkuQ@mail.gmail.com> <20160126134005.GD3942@kib.kiev.ua> <CA%2BhQ2%2BivWYJMDUwzdZGW88-mWzSVfPzX212sOFVmxxN0hpZ%2BQQ@mail.gmail.com> <20160126182543.64050678@ernst.home> <Pine.GSO.4.64.1601261743450.12995@sea.ntplx.net> <20160127013145.36f2aaef@ernst.home> <20160127132558.W985@besplex.bde.org> <CAN6yY1snu5YkXbTTHku4OAE6UyoQ5ibyM79KgHUN2dzRgvXSuA@mail.gmail.com> <CAP=KkTwEGVhKxSmZUDsq4hJ9K_nHrO9di1maS7zVn2CNX8TqAg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
ba>Is it possible that ppoll() doesn't return an error and yet revents
ba>have set either POLLERR or POLLHUP or POLLNVAL?
Apart from timeout.

On Wed, Jan 27, 2016 at 12:14 PM, Boris Astardzhiev <
boris.astardzhiev@gmail.com> wrote:

> Hello,
>
> I've made a few changes in the patch as recommended here starting with
> the switch to ppoll(). I have a question since it's not quite clear to me
> as written
> in the manpage. Is it possible that ppoll() doesn't return an error and
> yet revents
> have set either POLLERR or POLLHUP or POLLNVAL?
>
> See patch and comments are again welcomed.
>
>
> On Wed, Jan 27, 2016 at 6:07 AM, Kevin Oberman <rkoberman@gmail.com>
> wrote:
>
>> Since this has become a debate on programming style, it seem appropriate
>> to mention that Edward Yourdan passed away last Tuesday. For those too
>> young to recognize the name, he was the developer of modern structured
>> programming. He did recognize the style rules are important, but not
>> iron-clad.
>>
>> Kevin Oberman, Part time kid herder and retired Network Engineer
>> E-mail: rkoberman@gmail.com
>> PGP Fingerprint: D03FB98AFA78E3B78C1694B318AB39EF1B055683
>>
>> On Tue, Jan 26, 2016 at 7:04 PM, Bruce Evans <brde@optusnet.com.au>
>> wrote:
>>
>>> On Wed, 27 Jan 2016, Gary Jennejohn wrote:
>>>
>>> On Tue, 26 Jan 2016 17:46:52 -0500 (EST)
>>>> Daniel Eischen <deischen@freebsd.org> wrote:
>>>>
>>>> On Tue, 26 Jan 2016, Gary Jennejohn wrote:
>>>>>
>>>>> On Tue, 26 Jan 2016 09:06:39 -0800
>>>>>> Luigi Rizzo <rizzo@iet.unipi.it> wrote:
>>>>>>
>>>>>> On Tue, Jan 26, 2016 at 5:40 AM, Konstantin Belousov
>>>>>>> <kostikbel@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.
>>>>>>
>>>>>
>>> +1
>>>
>>> I used to program in a strict version of the "new" style 25-30 years
>>> ago, but learned better.  In the strict version, every variable must
>>> have minimal scope, so squillions of inner blocks are needed to limit
>>> the scopes.  Some deeply nested of course.  This is a good obfuscation.
>>> It even breaks -Wshadow by letting you have unrelated variables named
>>> 'i' that don't shadow each other because their scope is limited.  Such
>>> variables are good in separate functions but not in the same function.
>>> Understanding the code to see that the variables are actually unrelated
>>> requires counting more braces than usual.  If you don't do this
>>> strictly then you get a random style with some variables declared at
>>> the top and some in inner blocks for mostly historical reasons.  A
>>> strict style with all of the variables at the top is much easier to
>>> write and read.
>>>
>>> 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.
>>>>
>>>
>>> Lots of inner blocks are good for both making simple code look complex
>>> and making it easier to write the complex code in the same function,
>>> at least if you use a tiny indentation so that you can have 40 levels
>>> of indentation without needing a 500-column terminal.
>>>
>>> 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.
>>>>
>>>
>>> No, that is a different baz, and is warned about by Wshadow.
>>>
>>> Something like for (int i = 0; i < 2; i++) is IMHO OK.
>>>>
>>>
>>> Except it is C++ style which is so forbidden that style(9) doesn't
>>> know that it needs a rule to forbid it.
>>>
>>> The worst is C++ style that doesn't limit the scope  -- a bunch of
>>> variables at the top and then somewhere in the middle of the function
>>> another variable is needed and it is declared at top level of the
>>> function scope.  I sometimes do this when in a hurry.  The strict
>>> K&R-C90 style requires opening an inner block to do little more than
>>> hold the declaration and then (re)indenting and (re)formatting all
>>> the code in the inner block.  The C++ style reduces writability and
>>> readability in a different way.  It doesn't cause excessive indentation
>>> but it doesn't limit the scope much differently than putting all the
>>> declarations at the top.  At least the reader can find the declarations
>>> easily when they are at the top.
>>>
>>> Bruce
>>>
>>> _______________________________________________
>>> freebsd-net@freebsd.org mailing list
>>> https://lists.freebsd.org/mailman/listinfo/freebsd-net
>>> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
>>>
>>
>>
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAP=KkTwqYLkUvd-7wiCWndvFQX4D3qw8q18LhxjofHQnUrKKXA>