On 1/17/2020 4:51 AM, Corinna Vinschen wrote: > On Jan 17 10:48, Corinna Vinschen wrote: >> On Jan 16 18:34, Ken Brown wrote: >>> If that flag is not set, or if an attempt is made to open a different >>> type of socket, the errno is now EOPNOTSUPP instead of ENXIO. This is >>> consistent with POSIX, starting with the 2016 edition. Earlier >>> editions were silent on this issue. >>> --- >>> winsup/cygwin/fhandler.h | 2 ++ >>> winsup/cygwin/fhandler_socket.cc | 2 +- >>> winsup/cygwin/fhandler_socket_local.cc | 16 ++++++++++++++++ >>> winsup/cygwin/fhandler_socket_unix.cc | 16 ++++++++++++++++ >>> winsup/cygwin/release/3.1.3 | 7 +++++++ >>> winsup/doc/new-features.xml | 6 ++++++ >>> 6 files changed, 48 insertions(+), 1 deletion(-) >> >> I'm a bit concerned here that some function calls might succeed >> accidentally or even crash, given that the original socket code doesn't >> cope with the nohandle flag. Did you perform some basic testing? > > Iow, do the usual socket calls on a fhandler_socket_local return EBADF > now? Ignoring fhandler_socket_unix for now.
I really hadn't thought this through very well. I think the following additional patch should do the job: --- a/winsup/cygwin/net.cc +++ b/winsup/cygwin/net.cc @@ -67,6 +67,11 @@ get (const int fd) if (!fh) set_errno (ENOTSOCK); + else if (fh->get_flags () & O_PATH) + { + set_errno (EBADF); + fh = NULL; + } return fh; } I'll do some testing and then report back with a revised patch. Thanks for catching my mistakes. Ken