Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Sep 2021 21:25:23 +0200
From:      Michael Tuexen <michael.tuexen@macmic.franken.de>
To:        John Baldwin <jhb@freebsd.org>
Cc:        Mark Johnston <markj@FreeBSD.org>, "src-committers@freebsd.org" <src-committers@FreeBSD.org>, "dev-commits-src-all@freebsd.org" <dev-commits-src-all@FreeBSD.org>, "dev-commits-src-main@freebsd.org" <dev-commits-src-main@FreeBSD.org>
Subject:   Re: git: b864b67a0d19 - main - socket: Do not include control messages in FIONREAD return value
Message-ID:  <BFB7C96E-CB33-4EB8-804C-E9AACC4BCAB7@macmic.franken.de>
In-Reply-To: <270ac6c6-1fdf-879a-cbea-ef43200ef12a@FreeBSD.org>
References:  <202109122039.18CKdpwW094531@gitrepo.freebsd.org> <270ac6c6-1fdf-879a-cbea-ef43200ef12a@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> On 13. Sep 2021, at 18:29, John Baldwin <jhb@freebsd.org> wrote:
>=20
> On 9/12/21 1:39 PM, Mark Johnston wrote:
>> The branch main has been updated by markj:
>> URL: =
https://cgit.FreeBSD.org/src/commit/?id=3Db864b67a0d197f59ecf6698940600956=
ceee2cae
>> commit b864b67a0d197f59ecf6698940600956ceee2cae
>> Author:     Mark Johnston <markj@FreeBSD.org>
>> AuthorDate: 2021-09-12 20:05:49 +0000
>> Commit:     Mark Johnston <markj@FreeBSD.org>
>> CommitDate: 2021-09-12 20:39:44 +0000
>>     socket: Do not include control messages in FIONREAD return value
>>          Some system software expects to be able to read at least the =
number of
>>     bytes returned by FIONREAD.  When control messages are counted in =
this
>>     return value, this assumption is violated.  Follow Linux and =
OpenBSD
>>     here (as well as our own kevent(EVFILT_READ)) and only return the =
number
>>     of data bytes available.
>>          Reported by:    avg
>>     MFC after:      2 weeks
>=20
> In a somewhat similar vein, it would be nice to eventually have new =
ioctls
> to know how much data and control are available in the next message =
for
> datagram-oriented sockets.  Right now if you are working with a =
datagram
> socket with variable-sized messages there's no good way to know how =
big the
> next message is (to resize a read buffer) as FIONREAD can count =
multiple
> messages.  There's also no way at all to cope with control messages =
aside
> from retrying with some naive algorithm like doubling the size if =
MSG_CTRUNC
> is set, but that also requires always using MSG_PEEK so that you =
always
> end up reading a message at least twice.
That still requires two system calls. In SCTP, there is a CMSG you can
receive with a messages, which contains the metadata of the next message
you will receive.
So it might be an idea to define a CMSG containing the length of the =
next
message (if available).

Best regards
Michael
>=20
> --=20
> John Baldwin




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BFB7C96E-CB33-4EB8-804C-E9AACC4BCAB7>