What guarantee do we have that nothing other than a tty in this state
will return EIO for the ioctl? The implementation on the kernel side
suggests that, if they tried to put any other device in such a state
by replacing its ioctl function the same way, it would also give EIO
for these ioctls.
Yeah, EIO is unconditionally signalled for any (expect TIOCSPGRP) ioctl call when a tty is hung.
While a TIOCGWINSZ ioctl call that returns EIO will very likely be a tty, there is indeed no such guarantee.
I'm hopeful there's some good fix here where we don't have to have
either of these bad behaviors, but returning true for isatty() of a
device that is absolutely not a tty is a much worse behavior than
returning false for a device that is/was a tty when it was opened but
that's been replaced by the kernel with a defunct device.