NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/58916: timerfd(2) claims ready for write
The following reply was made to PR kern/58916; it has been noted by GNATS.
From: Taylor R Campbell <riastradh%NetBSD.org@localhost>
To: Robert Elz <kre%NetBSD.org@localhost>
Cc: gnats-bugs%NetBSD.org@localhost, netbsd-bugs%NetBSD.org@localhost
Subject: Re: kern/58916: timerfd(2) claims ready for write
Date: Thu, 19 Dec 2024 14:15:01 +0000
> Date: Thu, 19 Dec 2024 19:49:40 +0700
> From: Robert Elz <kre%munnari.OZ.AU@localhost>
>
> Date: Thu, 19 Dec 2024 02:39:17 +0000
> From: Taylor R Campbell <campbell%mumble.net@localhost>
> Message-ID: <20241219023918.2023460BB5%jupiter.mumble.net@localhost>
>
> | select(2) returns nonwritable if asked about the reader side of a
> | pipe (and vice versa, nonreadable if asked about the writer side of a
> | pipe). Is that a bug?
>
> Perhaps - I assume that also applies to any fd open O_WRONLY or O_RDONLY
> with select/poll used for the other direction. In practice I'm not
> sure it matters, as real code just doesn't do things like this, code
> doesn't ask when it can write to a fd which doesn't support write()
> there's no point.
It's not limited to O_WRONLY and O_RDONLY, or the read-only and
write-only sides of a pipe.
I tested with a disconnected stream-type socket and got the same
result: read and write don't hang (they fail immediately with
ENOTCONN, rather than EBADF), but select doesn't report them readable
or writable.
I checked some input-only devices too like wskbd and wsmouse, and they
too never return POLLOUT|POLLWRNORM even though write would fail
immediately with ENODEV.
I think if we want select and poll to guarantee claiming
readable/writable if a read or write would return immediately, we have
a lot of work to do.
Now it may be worthwhile to audit device poll routines for various
types of bugs (like returning E* instead of POLL*), because they are
often not very carefully written.
But I don't think the particular behaviour you're asking for is useful
when the underlying file object guarantees that read or write will
_never_ work because the operation is nonsensical.
Home |
Main Index |
Thread Index |
Old Index