From: Paolo Bonzini <pbonzini@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: QEMU <qemu-devel@nongnu.org>,
samuel.thibault@ens-lyon.org,
"Richard W.M. Jones" <rjones@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
renzo@cs.unibo.it
Subject: Re: [Qemu-devel] [PATCH for-3.2 09/41] slirp: add a set_nonblock() callback
Date: Thu, 22 Nov 2018 14:09:34 +0100 [thread overview]
Message-ID: <54889642-c4a4-7eb1-4217-c84936e18dcb@redhat.com> (raw)
In-Reply-To: <CAJ+F1CKxYgVMUJ6Sw3YTvCr4Nr36ZSxkEN-4wxeJRirsCtSvQw@mail.gmail.com>
On 21/11/18 22:02, Marc-André Lureau wrote:
> Hi
> On Thu, Nov 15, 2018 at 5:09 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
>>
>> On 14/11/2018 13:36, Marc-André Lureau wrote:
>>> qemu_set_nonblock() does some event registration with the main loop on
>>> win32, let's have a callback.
>>>
>>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>>
>> Perhaps a better interface would be register_poll_fd, which is called
>> before a file descriptor can be returned to slirp_pollfds_fill? And
>> perhaps a dual unregister_poll_fd, which QEMU would leave empty, to be
>> called before closing the file descriptor.
>
> That sounds like a good idea, but I think it will bring more issues as
> qemu_fd_register() doing WSAEventSelect will put the socket in
> nonblocking mode anyway, and we don't have/need qemu_fd_unregister()
> yet:
Right, I was more thinking of other possible future clients of SLIRP.
But what you have now surely is fine.
(One possible way to work around the problem could be to put the socket
in non-blocking mode in SLIRP, since that is OS-dependent but not
client-dependent. Then we can document that the register/unregister_fd
API is called with sockets that are already in non-blocking mode. That
complicates the code a bit in order to have a nicer API).
Paolo
> https://msdn.microsoft.com/de-de/library/windows/desktop/ms738573(v=vs.85).aspx
> "The WSAAsyncSelect and WSAEventSelect functions automatically set a
> socket to nonblocking mode. If WSAAsyncSelect or WSAEventSelect has
> been issued on a socket, then any attempt to use ioctlsocket to set
> the socket back to blocking mode will fail with WSAEINVAL.
> To set the socket back to blocking mode, an application must first
> disable WSAAsyncSelect by calling WSAAsyncSelect with the lEvent
> parameter equal to zero, or disable WSAEventSelect by calling
> WSAEventSelect with the lNetworkEvents parameter equal to zero."
>
> I will stick to the set_nonblock() callback for now.
>
> thanks
>
>
>
>> Paolo
>>
>>> ---
>>> slirp/libslirp.h | 1 +
>>> net/slirp.c | 1 +
>>> slirp/misc.c | 2 +-
>>> slirp/tcp_subr.c | 4 ++--
>>> 4 files changed, 5 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/slirp/libslirp.h b/slirp/libslirp.h
>>> index 88185e6c33..f2e7f94ebb 100644
>>> --- a/slirp/libslirp.h
>>> +++ b/slirp/libslirp.h
>>> @@ -20,6 +20,7 @@ typedef struct SlirpCb {
>>> SlirpTimerCb cb, void *opaque);
>>> void (*timer_free)(void *timer);
>>> void (*timer_mod)(void *timer, int64_t expire_timer);
>>> + void (*set_nonblock)(int fd);
>>> } SlirpCb;
>>>
>>>
>>> diff --git a/net/slirp.c b/net/slirp.c
>>> index 7b28886802..5ea8c255f6 100644
>>> --- a/net/slirp.c
>>> +++ b/net/slirp.c
>>> @@ -190,6 +190,7 @@ static SlirpCb slirp_cb = {
>>> .timer_new = net_slirp_timer_new,
>>> .timer_free = net_slirp_timer_free,
>>> .timer_mod = net_slirp_timer_mod,
>>> + .set_nonblock = qemu_set_nonblock,
>>> };
>>>
>>> static int net_slirp_init(NetClientState *peer, const char *model,
>>> diff --git a/slirp/misc.c b/slirp/misc.c
>>> index 7972b9b05b..dd2b3512a8 100644
>>> --- a/slirp/misc.c
>>> +++ b/slirp/misc.c
>>> @@ -174,7 +174,7 @@ fork_exec(struct socket *so, const char *ex)
>>> socket_set_fast_reuse(so->s);
>>> opt = 1;
>>> qemu_setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));
>>> - qemu_set_nonblock(so->s);
>>> + so->slirp->cb->set_nonblock(so->s);
>>> return 1;
>>> }
>>> #endif
>>> diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
>>> index 4b40850c7a..8d97f1f54e 100644
>>> --- a/slirp/tcp_subr.c
>>> +++ b/slirp/tcp_subr.c
>>> @@ -412,7 +412,7 @@ int tcp_fconnect(struct socket *so, unsigned short af)
>>> int opt, s=so->s;
>>> struct sockaddr_storage addr;
>>>
>>> - qemu_set_nonblock(s);
>>> + so->slirp->cb->set_nonblock(s);
>>> socket_set_fast_reuse(s);
>>> opt = 1;
>>> qemu_setsockopt(s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(opt));
>>> @@ -484,7 +484,7 @@ void tcp_connect(struct socket *inso)
>>> tcp_close(sototcpcb(so)); /* This will sofree() as well */
>>> return;
>>> }
>>> - qemu_set_nonblock(s);
>>> + so->slirp->cb->set_nonblock(s);
>>> socket_set_fast_reuse(s);
>>> opt = 1;
>>> qemu_setsockopt(s, SOL_SOCKET, SO_OOBINLINE, &opt, sizeof(int));
>>>
>>
>>
>
>
next prev parent reply other threads:[~2018-11-22 13:09 UTC|newest]
Thread overview: 137+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-14 12:36 [Qemu-devel] [PATCH for-3.2 00/41] RFC: slirp: make it again a standalone project Marc-André Lureau
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 01/41] slirp: move socket pair creation in helper function Marc-André Lureau
2018-11-19 22:46 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 02/41] glib-compat: add g_spawn_async_with_fds() fallback Marc-André Lureau
2018-11-19 22:50 ` Samuel Thibault
2018-11-20 6:11 ` Thomas Huth
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 03/41] slirp: simplify fork_exec() Marc-André Lureau
2018-11-14 14:22 ` Daniel P. Berrangé
2018-11-19 22:59 ` Samuel Thibault
2018-11-19 23:20 ` Eric Blake
2018-11-19 22:56 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 04/41] slirp: remove unused M_TRAILINGSPACE Marc-André Lureau
2018-11-14 13:32 ` Daniel P. Berrangé
2018-11-19 23:01 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 05/41] slirp: use a callback structure to interface with qemu Marc-André Lureau
2018-11-14 13:10 ` Philippe Mathieu-Daudé
2018-11-19 23:09 ` Samuel Thibault
2018-11-14 14:30 ` Stefan Hajnoczi
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 06/41] slirp: add a callback for qemu_chr_fe_write_all() Marc-André Lureau
2018-11-15 13:12 ` Paolo Bonzini
2019-01-15 19:22 ` Marc-André Lureau
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 07/41] slirp: add clock_get_ns() callback Marc-André Lureau
2018-11-15 12:54 ` Paolo Bonzini
2018-11-19 23:15 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 08/41] slirp: add callbacks for timer Marc-André Lureau
2018-11-15 12:56 ` Paolo Bonzini
2019-01-15 19:21 ` Marc-André Lureau
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 09/41] slirp: add a set_nonblock() callback Marc-André Lureau
2018-11-15 13:03 ` Paolo Bonzini
2018-11-21 21:02 ` Marc-André Lureau
2018-11-22 13:09 ` Paolo Bonzini [this message]
2019-01-15 19:22 ` Marc-André Lureau
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 10/41] slirp: remove PROBE_CONN dead-code Marc-André Lureau
2018-11-14 13:12 ` Philippe Mathieu-Daudé
2018-11-19 23:17 ` Samuel Thibault
2018-11-14 13:33 ` Daniel P. Berrangé
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 11/41] slirp: remove FULL_BOLT Marc-André Lureau
2018-11-14 13:46 ` Daniel P. Berrangé
2018-11-19 23:18 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 12/41] slirp: remove the disabled readv()/writev() code path Marc-André Lureau
2018-11-14 13:46 ` Daniel P. Berrangé
2018-11-19 23:19 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 13/41] slirp: remove HAVE_SYS_SIGNAL_H Marc-André Lureau
2018-11-14 13:47 ` Daniel P. Berrangé
2018-11-20 0:58 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 14/41] slirp: remove unused HAVE_SYS_BITYPES_H Marc-André Lureau
2018-11-14 13:47 ` Daniel P. Berrangé
2018-11-20 0:59 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 15/41] slirp: remove NO_UNIX_SOCKETS Marc-André Lureau
2018-11-14 13:48 ` Daniel P. Berrangé
2018-11-20 0:59 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 16/41] slirp: remove unused HAVE_SYS_STROPTS_H Marc-André Lureau
2018-11-14 13:49 ` Daniel P. Berrangé
2018-11-20 1:00 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 17/41] slirp: remove unused HAVE_ARPA_INET_H Marc-André Lureau
2018-11-14 13:50 ` Daniel P. Berrangé
2018-11-20 1:01 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 18/41] slirp: remove unused HAVE_SYS_WAIT_H Marc-André Lureau
2018-11-14 13:50 ` Daniel P. Berrangé
2018-11-20 1:01 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 19/41] slirp: remove unused HAVE_SYS_SELECT_H Marc-André Lureau
2018-11-14 13:51 ` Daniel P. Berrangé
2018-11-20 1:02 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 20/41] slirp: remove HAVE_SYS_IOCTL_H Marc-André Lureau
2018-11-14 13:51 ` Daniel P. Berrangé
2018-11-20 1:03 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 21/41] slirp: remove HAVE_SYS_FILIO_H Marc-André Lureau
2018-11-14 13:52 ` Daniel P. Berrangé
2018-11-20 1:04 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 22/41] slirp: remove unused DECLARE_IOVEC Marc-André Lureau
2018-11-14 13:53 ` Daniel P. Berrangé
2018-11-20 1:05 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 23/41] slirp: remove unused HAVE_INET_ATON Marc-André Lureau
2018-11-14 13:54 ` Daniel P. Berrangé
2018-11-20 1:05 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 24/41] slirp: replace HOST_WORDS_BIGENDIAN with glib equivalent Marc-André Lureau
2018-11-14 13:14 ` Philippe Mathieu-Daudé
2018-11-20 1:07 ` Samuel Thibault
2018-11-14 13:32 ` Daniel P. Berrangé
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 25/41] slirp: replace SIZEOF_CHAR_P " Marc-André Lureau
2018-11-14 13:14 ` Philippe Mathieu-Daudé
2018-11-20 1:08 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 26/41] slirp: replace compile time DO_KEEPALIVE Marc-André Lureau
2018-11-20 1:09 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 27/41] slirp: remove unused global slirp_instance Marc-André Lureau
2018-11-14 13:55 ` Daniel P. Berrangé
2018-11-20 1:10 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 28/41] slirp: replace error_report() with g_critical() Marc-André Lureau
2018-11-20 1:14 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 29/41] slirp: improve a bit the debug macros Marc-André Lureau
2018-11-14 14:04 ` Daniel P. Berrangé
2018-11-14 20:51 ` Marc-André Lureau
2018-11-20 1:19 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 30/41] slirp: replace trace functions with DEBUG calls Marc-André Lureau
2018-11-20 1:21 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 31/41] slirp: add a callback to log guest errors Marc-André Lureau
2018-11-20 1:27 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 32/41] slirp: remove unused sbflush() Marc-André Lureau
2018-11-14 14:05 ` Daniel P. Berrangé
2018-11-20 1:28 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 33/41] slirp: replace qemu_notify_event() with a callback Marc-André Lureau
2018-11-20 1:32 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 34/41] slirp: remove #if notdef dead code Marc-André Lureau
2018-11-14 14:07 ` Daniel P. Berrangé
2018-11-20 1:28 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 35/41] slirp: NULL is defined by glib (at least) Marc-André Lureau
2018-11-14 14:11 ` Daniel P. Berrangé
2018-11-20 1:33 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 36/41] slirp: remove dead TCP_ACK_HACK code Marc-André Lureau
2018-11-14 14:12 ` Daniel P. Berrangé
2018-11-20 1:34 ` Samuel Thibault
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 37/41] slirp: replace ARRAY_SIZE with G_N_ELEMENTS Marc-André Lureau
2018-11-14 13:17 ` Philippe Mathieu-Daudé
2018-11-20 1:35 ` Samuel Thibault
2018-11-14 14:15 ` Daniel P. Berrangé
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 38/41] net: do not depend on slirp internals Marc-André Lureau
2018-11-14 13:21 ` Philippe Mathieu-Daudé
2018-11-20 1:37 ` Samuel Thibault
2018-11-15 13:19 ` Paolo Bonzini
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 39/41] slirp: move QEMU state saving to a separate unit Marc-André Lureau
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 40/41] slirp: replace remaining QEMU dependency Marc-André Lureau
2018-11-14 12:36 ` [Qemu-devel] [PATCH for-3.2 41/41] build-sys: add a basic meson build Marc-André Lureau
2018-11-14 12:59 ` [Qemu-devel] [PATCH for-3.2 00/41] RFC: slirp: make it again a standalone project Markus Armbruster
2018-11-14 13:20 ` Richard W.M. Jones
2018-11-14 13:33 ` Thomas Huth
2018-11-14 14:46 ` Markus Armbruster
2018-11-14 15:10 ` Dr. David Alan Gilbert
2018-11-14 15:14 ` Richard W.M. Jones
2018-11-14 16:52 ` Thomas Huth
2018-11-14 17:51 ` Markus Armbruster
2018-11-14 18:14 ` Dr. David Alan Gilbert
2018-11-14 13:45 ` Daniel P. Berrangé
2018-11-15 16:49 ` Giuseppe Scrivano
2018-11-16 5:09 ` Akihiro Suda
2018-11-14 14:26 ` Stefan Hajnoczi
2018-11-14 14:30 ` Daniel P. Berrangé
2018-11-14 15:26 ` Philippe Mathieu-Daudé
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=54889642-c4a4-7eb1-4217-c84936e18dcb@redhat.com \
--to=pbonzini@redhat.com \
--cc=marcandre.lureau@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=renzo@cs.unibo.it \
--cc=rjones@redhat.com \
--cc=samuel.thibault@ens-lyon.org \
--cc=stefanha@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).