From: "Daniel P. Berrangé" <berrange@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>,
qemu-devel@nongnu.org, Peter Maydell <peter.maydell@linaro.org>,
Stefan Weil <sw@weilnetz.de>, Paolo Bonzini <pbonzini@redhat.com>,
Joel Stanley <joel@jms.id.au>,
Laurent Vivier <lvivier@redhat.com>,
Thomas Huth <thuth@redhat.com>, Jason Wang <jasowang@redhat.com>,
qemu-arm@nongnu.org, Stefan Berger <stefanb@linux.vnet.ibm.com>
Subject: Re: [PATCH 3/4] win32: stop mixing SOCKET and file descriptor space
Date: Mon, 20 Feb 2023 15:58:28 +0000 [thread overview]
Message-ID: <Y/OYpB9AAeytSPMP@redhat.com> (raw)
In-Reply-To: <CAMxuvaxiN1jYr70k2yK0CUSjo4UQF8DqjPX_COvCdtAWhf3zNw@mail.gmail.com>
On Mon, Feb 20, 2023 at 07:29:11PM +0400, Marc-André Lureau wrote:
> Hi
>
> On Mon, Feb 20, 2023 at 4:38 PM Markus Armbruster <armbru@redhat.com> wrote:
>
> > marcandre.lureau@redhat.com writes:
> >
> > > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> > >
> > > Until now, a win32 SOCKET handle is often cast to an int file
> > > descriptor, as this is what other OS use for sockets.
> > > @@ -275,15 +276,21 @@ GSource *qio_channel_create_fd_watch(QIOChannel
> > *ioc,
> > >
> > > #ifdef CONFIG_WIN32
> > > GSource *qio_channel_create_socket_watch(QIOChannel *ioc,
> > > - int socket,
> > > + int sockfd,
> > > GIOCondition condition)
> > > {
> > > + SOCKET s = _get_osfhandle(sockfd);
> >
> > _get_osfhandle() returns a HANDLE as intptr_t. Is a HANDLE that refers
> > to a socket also a SOCKET? The docs I found so far are confusing...
> >
>
> yes
>
>
> >
> > > GSource *source;
> > > QIOChannelSocketSource *ssource;
> > >
> > > - WSAEventSelect(socket, ioc->event,
> > > - FD_READ | FD_ACCEPT | FD_CLOSE |
> > > - FD_CONNECT | FD_WRITE | FD_OOB);
> > > + if (s == -1 ||
> > > + WSAEventSelect(s, ioc->event,
> > > + FD_READ | FD_ACCEPT | FD_CLOSE |
> > > + FD_CONNECT | FD_WRITE | FD_OOB) == SOCKET_ERROR)
> > {
> > > + g_autofree gchar *emsg = g_win32_error_message(GetLastError());
> > > + error_printf("error creating socket watch: %s", emsg);
> >
> > Uh, why is printing an error appropriate here? Shouldn't we leave error
> > handling to callers?
> >
>
> We could, but we would have to modify callers as well, which can go deep. I
> am considering a &error_warn as a first approach (I am working on something
> to check other WSA API users). Does that sound reasonable?
The caller should also be handling 'NULL' as a return value, as none
of them expect that. They just carry on calling g_source APIs. "Luckily"
glib turns them all into no-ops, so it won't crash, but it also means
the backend is likelyto be non-functional since events won't be
processed.
It isn't clear that there's much of value that a caller can do when it
gets a NULL source either. The context in wich we call this API does
not have error propagation either and its non-trival to add in many
of the callers.
Feels like the realistic choice is between a error_report or an
assert/abort, whether in this method or the caller doesn't make
all that much difference.
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2023-02-20 15:59 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-12 20:49 [PATCH 0/4] win32: do not mix SOCKET and fd space marcandre.lureau
2023-02-12 20:49 ` [PATCH 1/4] tests: use closesocket() marcandre.lureau
2023-02-13 8:03 ` Thomas Huth
2023-02-12 20:49 ` [PATCH 2/4] io: " marcandre.lureau
2023-02-13 8:04 ` Thomas Huth
2023-02-12 20:49 ` [PATCH 3/4] win32: stop mixing SOCKET and file descriptor space marcandre.lureau
2023-02-20 11:27 ` Marc-André Lureau
2023-02-20 12:38 ` Markus Armbruster
2023-02-20 15:29 ` Marc-André Lureau
2023-02-20 15:58 ` Daniel P. Berrangé [this message]
2023-02-21 8:18 ` Paolo Bonzini
2023-02-21 9:12 ` Marc-André Lureau
2023-02-21 10:40 ` Marc-André Lureau
2023-02-21 10:52 ` Paolo Bonzini
2023-02-12 20:49 ` [PATCH 4/4] win32: replace closesocket() with close() wrapper marcandre.lureau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y/OYpB9AAeytSPMP@redhat.com \
--to=berrange@redhat.com \
--cc=armbru@redhat.com \
--cc=jasowang@redhat.com \
--cc=joel@jms.id.au \
--cc=lvivier@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanb@linux.vnet.ibm.com \
--cc=sw@weilnetz.de \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.