* [PATCH v3 1/4] util/qemu-sockets: Replace the call to close a socket with closesocket()
2022-07-30 14:50 [PATCH v3 0/4] Enable unix socket support on Windows Bin Meng
@ 2022-07-30 14:50 ` Bin Meng
2022-07-30 14:50 ` [PATCH v3 2/4] util/qemu-sockets: Enable unix socket support on Windows Bin Meng
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Bin Meng @ 2022-07-30 14:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Bin Meng, Marc-André Lureau, Daniel P. Berrangé
From: Bin Meng <bin.meng@windriver.com>
close() is a *nix function. It works on any file descriptor, and
sockets in *nix are an example of a file descriptor.
closesocket() is a Windows-specific function, which works only
specifically with sockets. Sockets on Windows do not use *nix-style
file descriptors, and socket() returns a handle to a kernel object
instead, so it must be closed with closesocket().
In QEMU there is already a logic to handle such platform difference
in os-posix.h and os-win32.h, that:
* closesocket maps to close on POSIX
* closesocket maps to a wrapper that calls the real closesocket()
on Windows
Replace the call to close a socket with closesocket() instead.
Signed-off-by: Bin Meng <bin.meng@windriver.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
(no changes since v1)
util/qemu-sockets.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index 13b5b197f9..0e2298278f 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -487,7 +487,7 @@ int inet_connect_saddr(InetSocketAddress *saddr, Error **errp)
if (ret < 0) {
error_setg_errno(errp, errno, "Unable to set KEEPALIVE");
- close(sock);
+ closesocket(sock);
return -1;
}
}
@@ -1050,7 +1050,7 @@ static int unix_connect_saddr(UnixSocketAddress *saddr, Error **errp)
return sock;
err:
- close(sock);
+ closesocket(sock);
return -1;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v3 2/4] util/qemu-sockets: Enable unix socket support on Windows
2022-07-30 14:50 [PATCH v3 0/4] Enable unix socket support on Windows Bin Meng
2022-07-30 14:50 ` [PATCH v3 1/4] util/qemu-sockets: Replace the call to close a socket with closesocket() Bin Meng
@ 2022-07-30 14:50 ` Bin Meng
2022-08-01 7:09 ` Marc-André Lureau
2022-07-30 14:50 ` [PATCH v3 3/4] chardev/char-socket: Update AF_UNIX for Windows Bin Meng
2022-07-30 14:50 ` [PATCH v3 4/4] tests/unit: Update test-io-channel-socket.c " Bin Meng
3 siblings, 1 reply; 9+ messages in thread
From: Bin Meng @ 2022-07-30 14:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Bin Meng, Xuzhou Cheng, Daniel P. Berrangé, Stefan Weil
From: Bin Meng <bin.meng@windriver.com>
Support for the unix socket has existed both in BSD and Linux for the
longest time, but not on Windows. Since Windows 10 build 17063 [1],
the native support for the unix socket has come to Windows. Starting
this build, two Win32 processes can use the AF_UNIX address family
over Winsock API to communicate with each other.
[1] https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/
Signed-off-by: Xuzhou Cheng <xuzhou.cheng@windriver.com>
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---
Changes in v3:
- drop the run-time check afunix_available()
Changes in v2:
- move #include <afunix.h> to os-win32.h
- define WIN_BUILD_AF_UNIX only when CONFIG_WIN32
meson.build | 6 ++++++
include/sysemu/os-win32.h | 4 ++++
util/qemu-sockets.c | 14 +++++++-------
3 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/meson.build b/meson.build
index 294e9a8f32..3663b925d4 100644
--- a/meson.build
+++ b/meson.build
@@ -2327,6 +2327,12 @@ have_afalg = get_option('crypto_afalg') \
'''), error_message: 'AF_ALG requested but could not be detected').allowed()
config_host_data.set('CONFIG_AF_ALG', have_afalg)
+if targetos != 'windows'
+ config_host_data.set('CONFIG_AF_UNIX', true)
+else
+ config_host_data.set('CONFIG_AF_UNIX', cc.has_header('afunix.h'))
+endif
+
config_host_data.set('CONFIG_AF_VSOCK', cc.has_header_symbol(
'linux/vm_sockets.h', 'AF_VSOCK',
prefix: '#include <sys/socket.h>',
diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
index edc3b38a57..cebf260694 100644
--- a/include/sysemu/os-win32.h
+++ b/include/sysemu/os-win32.h
@@ -30,6 +30,10 @@
#include <windows.h>
#include <ws2tcpip.h>
+#ifdef CONFIG_AF_UNIX
+# include <afunix.h>
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index 0e2298278f..f9892506de 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -880,7 +880,7 @@ static int vsock_parse(VsockSocketAddress *addr, const char *str,
}
#endif /* CONFIG_AF_VSOCK */
-#ifndef _WIN32
+#ifdef CONFIG_AF_UNIX
static bool saddr_is_abstract(UnixSocketAddress *saddr)
{
@@ -1060,14 +1060,14 @@ static int unix_listen_saddr(UnixSocketAddress *saddr,
int num,
Error **errp)
{
- error_setg(errp, "unix sockets are not available on windows");
+ error_setg(errp, "unix sockets are not available on your host");
errno = ENOTSUP;
return -1;
}
static int unix_connect_saddr(UnixSocketAddress *saddr, Error **errp)
{
- error_setg(errp, "unix sockets are not available on windows");
+ error_setg(errp, "unix sockets are not available on your host");
errno = ENOTSUP;
return -1;
}
@@ -1335,7 +1335,7 @@ socket_sockaddr_to_address_inet(struct sockaddr_storage *sa,
}
-#ifndef WIN32
+#ifdef CONFIG_AF_UNIX
static SocketAddress *
socket_sockaddr_to_address_unix(struct sockaddr_storage *sa,
socklen_t salen,
@@ -1362,7 +1362,7 @@ socket_sockaddr_to_address_unix(struct sockaddr_storage *sa,
addr->u.q_unix.path = g_strndup(su->sun_path, salen);
return addr;
}
-#endif /* WIN32 */
+#endif /* CONFIG_AF_UNIX */
#ifdef CONFIG_AF_VSOCK
static SocketAddress *
@@ -1394,10 +1394,10 @@ socket_sockaddr_to_address(struct sockaddr_storage *sa,
case AF_INET6:
return socket_sockaddr_to_address_inet(sa, salen, errp);
-#ifndef WIN32
+#ifdef CONFIG_AF_UNIX
case AF_UNIX:
return socket_sockaddr_to_address_unix(sa, salen, errp);
-#endif /* WIN32 */
+#endif
#ifdef CONFIG_AF_VSOCK
case AF_VSOCK:
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/4] util/qemu-sockets: Enable unix socket support on Windows
2022-07-30 14:50 ` [PATCH v3 2/4] util/qemu-sockets: Enable unix socket support on Windows Bin Meng
@ 2022-08-01 7:09 ` Marc-André Lureau
2022-08-01 9:39 ` Daniel P. Berrangé
0 siblings, 1 reply; 9+ messages in thread
From: Marc-André Lureau @ 2022-08-01 7:09 UTC (permalink / raw)
To: Bin Meng
Cc: qemu-devel, Bin Meng, Xuzhou Cheng, Daniel P. Berrangé,
Stefan Weil
[-- Attachment #1: Type: text/plain, Size: 4449 bytes --]
Hi
On Sat, Jul 30, 2022 at 6:52 PM Bin Meng <bmeng.cn@gmail.com> wrote:
> From: Bin Meng <bin.meng@windriver.com>
>
> Support for the unix socket has existed both in BSD and Linux for the
> longest time, but not on Windows. Since Windows 10 build 17063 [1],
> the native support for the unix socket has come to Windows. Starting
> this build, two Win32 processes can use the AF_UNIX address family
> over Winsock API to communicate with each other.
>
> [1] https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/
>
> Signed-off-by: Xuzhou Cheng <xuzhou.cheng@windriver.com>
> Signed-off-by: Bin Meng <bin.meng@windriver.com>
> ---
>
> Changes in v3:
> - drop the run-time check afunix_available()
>
> Changes in v2:
> - move #include <afunix.h> to os-win32.h
> - define WIN_BUILD_AF_UNIX only when CONFIG_WIN32
>
> meson.build | 6 ++++++
> include/sysemu/os-win32.h | 4 ++++
> util/qemu-sockets.c | 14 +++++++-------
> 3 files changed, 17 insertions(+), 7 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index 294e9a8f32..3663b925d4 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -2327,6 +2327,12 @@ have_afalg = get_option('crypto_afalg') \
> '''), error_message: 'AF_ALG requested but could not be
> detected').allowed()
> config_host_data.set('CONFIG_AF_ALG', have_afalg)
>
> +if targetos != 'windows'
> + config_host_data.set('CONFIG_AF_UNIX', true)
>
Imho, we should simply define CONFIG_AFUNIX_H, regardless of the OS.
> +else
> + config_host_data.set('CONFIG_AF_UNIX', cc.has_header('afunix.h'))
> +endif
>
+
> config_host_data.set('CONFIG_AF_VSOCK', cc.has_header_symbol(
> 'linux/vm_sockets.h', 'AF_VSOCK',
> prefix: '#include <sys/socket.h>',
> diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
> index edc3b38a57..cebf260694 100644
> --- a/include/sysemu/os-win32.h
> +++ b/include/sysemu/os-win32.h
> @@ -30,6 +30,10 @@
> #include <windows.h>
> #include <ws2tcpip.h>
>
> +#ifdef CONFIG_AF_UNIX
> +# include <afunix.h>
> +#endif
>
we could also provide a fallback, the same I did for glib:
https://gitlab.gnome.org/GNOME/glib/-/commit/4339192b5391a37ecd55816c713537fb1990cd07
So all Windows build will have afunix code compiled.
+
> #ifdef __cplusplus
> extern "C" {
> #endif
> diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
> index 0e2298278f..f9892506de 100644
> --- a/util/qemu-sockets.c
> +++ b/util/qemu-sockets.c
> @@ -880,7 +880,7 @@ static int vsock_parse(VsockSocketAddress *addr, const
> char *str,
> }
> #endif /* CONFIG_AF_VSOCK */
>
> -#ifndef _WIN32
> +#ifdef CONFIG_AF_UNIX
>
> static bool saddr_is_abstract(UnixSocketAddress *saddr)
> {
> @@ -1060,14 +1060,14 @@ static int unix_listen_saddr(UnixSocketAddress
> *saddr,
> int num,
> Error **errp)
> {
> - error_setg(errp, "unix sockets are not available on windows");
> + error_setg(errp, "unix sockets are not available on your host");
> errno = ENOTSUP;
> return -1;
> }
>
> static int unix_connect_saddr(UnixSocketAddress *saddr, Error **errp)
> {
> - error_setg(errp, "unix sockets are not available on windows");
> + error_setg(errp, "unix sockets are not available on your host");
> errno = ENOTSUP;
> return -1;
> }
> @@ -1335,7 +1335,7 @@ socket_sockaddr_to_address_inet(struct
> sockaddr_storage *sa,
> }
>
>
> -#ifndef WIN32
> +#ifdef CONFIG_AF_UNIX
> static SocketAddress *
> socket_sockaddr_to_address_unix(struct sockaddr_storage *sa,
> socklen_t salen,
> @@ -1362,7 +1362,7 @@ socket_sockaddr_to_address_unix(struct
> sockaddr_storage *sa,
> addr->u.q_unix.path = g_strndup(su->sun_path, salen);
> return addr;
> }
> -#endif /* WIN32 */
> +#endif /* CONFIG_AF_UNIX */
>
> #ifdef CONFIG_AF_VSOCK
> static SocketAddress *
> @@ -1394,10 +1394,10 @@ socket_sockaddr_to_address(struct sockaddr_storage
> *sa,
> case AF_INET6:
> return socket_sockaddr_to_address_inet(sa, salen, errp);
>
> -#ifndef WIN32
> +#ifdef CONFIG_AF_UNIX
> case AF_UNIX:
> return socket_sockaddr_to_address_unix(sa, salen, errp);
> -#endif /* WIN32 */
> +#endif
>
> #ifdef CONFIG_AF_VSOCK
> case AF_VSOCK:
> --
> 2.34.1
>
>
>
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 6305 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/4] util/qemu-sockets: Enable unix socket support on Windows
2022-08-01 7:09 ` Marc-André Lureau
@ 2022-08-01 9:39 ` Daniel P. Berrangé
0 siblings, 0 replies; 9+ messages in thread
From: Daniel P. Berrangé @ 2022-08-01 9:39 UTC (permalink / raw)
To: Marc-André Lureau
Cc: Bin Meng, qemu-devel, Bin Meng, Xuzhou Cheng, Stefan Weil
On Mon, Aug 01, 2022 at 11:09:24AM +0400, Marc-André Lureau wrote:
> Hi
>
> On Sat, Jul 30, 2022 at 6:52 PM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> > From: Bin Meng <bin.meng@windriver.com>
> >
> > Support for the unix socket has existed both in BSD and Linux for the
> > longest time, but not on Windows. Since Windows 10 build 17063 [1],
> > the native support for the unix socket has come to Windows. Starting
> > this build, two Win32 processes can use the AF_UNIX address family
> > over Winsock API to communicate with each other.
> >
> > [1] https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/
> >
> > Signed-off-by: Xuzhou Cheng <xuzhou.cheng@windriver.com>
> > Signed-off-by: Bin Meng <bin.meng@windriver.com>
> > ---
> >
> > Changes in v3:
> > - drop the run-time check afunix_available()
> >
> > Changes in v2:
> > - move #include <afunix.h> to os-win32.h
> > - define WIN_BUILD_AF_UNIX only when CONFIG_WIN32
> >
> > meson.build | 6 ++++++
> > include/sysemu/os-win32.h | 4 ++++
> > util/qemu-sockets.c | 14 +++++++-------
> > 3 files changed, 17 insertions(+), 7 deletions(-)
> >
> > diff --git a/meson.build b/meson.build
> > index 294e9a8f32..3663b925d4 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -2327,6 +2327,12 @@ have_afalg = get_option('crypto_afalg') \
> > '''), error_message: 'AF_ALG requested but could not be
> > detected').allowed()
> > config_host_data.set('CONFIG_AF_ALG', have_afalg)
> >
> > +if targetos != 'windows'
> > + config_host_data.set('CONFIG_AF_UNIX', true)
> >
>
> Imho, we should simply define CONFIG_AFUNIX_H, regardless of the OS.
>
>
> > +else
> > + config_host_data.set('CONFIG_AF_UNIX', cc.has_header('afunix.h'))
> > +endif
> >
> +
> > config_host_data.set('CONFIG_AF_VSOCK', cc.has_header_symbol(
> > 'linux/vm_sockets.h', 'AF_VSOCK',
> > prefix: '#include <sys/socket.h>',
> > diff --git a/include/sysemu/os-win32.h b/include/sysemu/os-win32.h
> > index edc3b38a57..cebf260694 100644
> > --- a/include/sysemu/os-win32.h
> > +++ b/include/sysemu/os-win32.h
> > @@ -30,6 +30,10 @@
> > #include <windows.h>
> > #include <ws2tcpip.h>
> >
> > +#ifdef CONFIG_AF_UNIX
> > +# include <afunix.h>
> > +#endif
> >
>
> we could also provide a fallback, the same I did for glib:
> https://gitlab.gnome.org/GNOME/glib/-/commit/4339192b5391a37ecd55816c713537fb1990cd07
>
> So all Windows build will have afunix code compiled.
That's much nicer. It lets us get rid of the conditionals around all
the UNIX socket handling code across the codebase, except for the
FD passing checks which have to remain.
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 :|
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 3/4] chardev/char-socket: Update AF_UNIX for Windows
2022-07-30 14:50 [PATCH v3 0/4] Enable unix socket support on Windows Bin Meng
2022-07-30 14:50 ` [PATCH v3 1/4] util/qemu-sockets: Replace the call to close a socket with closesocket() Bin Meng
2022-07-30 14:50 ` [PATCH v3 2/4] util/qemu-sockets: Enable unix socket support on Windows Bin Meng
@ 2022-07-30 14:50 ` Bin Meng
2022-08-01 7:19 ` Marc-André Lureau
2022-07-30 14:50 ` [PATCH v3 4/4] tests/unit: Update test-io-channel-socket.c " Bin Meng
3 siblings, 1 reply; 9+ messages in thread
From: Bin Meng @ 2022-07-30 14:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Bin Meng, Marc-André Lureau, Paolo Bonzini
From: Bin Meng <bin.meng@windriver.com>
Now that AF_UNIX has come to Windows, update the existing logic in
qemu_chr_compute_filename() and qmp_chardev_open_socket() for Windows.
Signed-off-by: Bin Meng <bin.meng@windriver.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
(no changes since v2)
Changes in v2:
- drop #include <afunix.h> as it is now already included in osdep.h
chardev/char-socket.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/chardev/char-socket.c b/chardev/char-socket.c
index dc4e218eeb..14a56b7b13 100644
--- a/chardev/char-socket.c
+++ b/chardev/char-socket.c
@@ -557,7 +557,7 @@ static char *qemu_chr_compute_filename(SocketChardev *s)
const char *left = "", *right = "";
switch (ss->ss_family) {
-#ifndef _WIN32
+#ifdef CONFIG_AF_UNIX
case AF_UNIX:
return g_strdup_printf("unix:%s%s",
((struct sockaddr_un *)(ss))->sun_path,
@@ -1372,10 +1372,12 @@ static void qmp_chardev_open_socket(Chardev *chr,
}
qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_RECONNECTABLE);
+#ifndef _WIN32
/* TODO SOCKET_ADDRESS_FD where fd has AF_UNIX */
if (addr->type == SOCKET_ADDRESS_TYPE_UNIX) {
qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_FD_PASS);
}
+#endif
/*
* In the chardev-change special-case, we shouldn't register a new yank
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 3/4] chardev/char-socket: Update AF_UNIX for Windows
2022-07-30 14:50 ` [PATCH v3 3/4] chardev/char-socket: Update AF_UNIX for Windows Bin Meng
@ 2022-08-01 7:19 ` Marc-André Lureau
0 siblings, 0 replies; 9+ messages in thread
From: Marc-André Lureau @ 2022-08-01 7:19 UTC (permalink / raw)
To: Bin Meng; +Cc: qemu-devel, Bin Meng, Paolo Bonzini
[-- Attachment #1: Type: text/plain, Size: 1654 bytes --]
Hi
On Sat, Jul 30, 2022 at 6:54 PM Bin Meng <bmeng.cn@gmail.com> wrote:
> From: Bin Meng <bin.meng@windriver.com>
>
> Now that AF_UNIX has come to Windows, update the existing logic in
> qemu_chr_compute_filename() and qmp_chardev_open_socket() for Windows.
>
> Signed-off-by: Bin Meng <bin.meng@windriver.com>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>
> (no changes since v2)
>
> Changes in v2:
> - drop #include <afunix.h> as it is now already included in osdep.h
>
> chardev/char-socket.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/chardev/char-socket.c b/chardev/char-socket.c
> index dc4e218eeb..14a56b7b13 100644
> --- a/chardev/char-socket.c
> +++ b/chardev/char-socket.c
> @@ -557,7 +557,7 @@ static char *qemu_chr_compute_filename(SocketChardev
> *s)
> const char *left = "", *right = "";
>
> switch (ss->ss_family) {
> -#ifndef _WIN32
> +#ifdef CONFIG_AF_UNIX
> case AF_UNIX:
> return g_strdup_printf("unix:%s%s",
> ((struct sockaddr_un *)(ss))->sun_path,
> @@ -1372,10 +1372,12 @@ static void qmp_chardev_open_socket(Chardev *chr,
> }
>
> qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_RECONNECTABLE);
> +#ifndef _WIN32
> /* TODO SOCKET_ADDRESS_FD where fd has AF_UNIX */
> if (addr->type == SOCKET_ADDRESS_TYPE_UNIX) {
> qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_FD_PASS);
> }
> +#endif
>
>
With the fallback for afunix.h header on windows, we can enable various
code paths with AF_UNIX, without condition.
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 2426 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 4/4] tests/unit: Update test-io-channel-socket.c for Windows
2022-07-30 14:50 [PATCH v3 0/4] Enable unix socket support on Windows Bin Meng
` (2 preceding siblings ...)
2022-07-30 14:50 ` [PATCH v3 3/4] chardev/char-socket: Update AF_UNIX for Windows Bin Meng
@ 2022-07-30 14:50 ` Bin Meng
2022-08-01 7:32 ` Marc-André Lureau
3 siblings, 1 reply; 9+ messages in thread
From: Bin Meng @ 2022-07-30 14:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Bin Meng, Daniel P. Berrangé
From: Bin Meng <bin.meng@windriver.com>
Enable the following 3 test cases for Windows when AF_UNIX is available:
* test_io_channel_unix_sync
* test_io_channel_unix_async
* test_io_channel_unix_listen_cleanup
Signed-off-by: Bin Meng <bin.meng@windriver.com>
---
(no changes since v2)
Changes in v2:
- new patch: tests/unit: Update test-io-channel-socket.c for Windows
tests/unit/test-io-channel-socket.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/tests/unit/test-io-channel-socket.c b/tests/unit/test-io-channel-socket.c
index 6713886d02..ec5df32489 100644
--- a/tests/unit/test-io-channel-socket.c
+++ b/tests/unit/test-io-channel-socket.c
@@ -179,10 +179,12 @@ static void test_io_channel(bool async,
test_io_channel_setup_async(listen_addr, connect_addr,
&srv, &src, &dst);
+#ifndef _WIN32
g_assert(!passFD ||
qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS));
g_assert(!passFD ||
qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS));
+#endif
g_assert(qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_SHUTDOWN));
g_assert(qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_SHUTDOWN));
@@ -206,10 +208,12 @@ static void test_io_channel(bool async,
test_io_channel_setup_async(listen_addr, connect_addr,
&srv, &src, &dst);
+#ifndef _WIN32
g_assert(!passFD ||
qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS));
g_assert(!passFD ||
qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS));
+#endif
g_assert(qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_SHUTDOWN));
g_assert(qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_SHUTDOWN));
@@ -236,10 +240,12 @@ static void test_io_channel(bool async,
test_io_channel_setup_sync(listen_addr, connect_addr,
&srv, &src, &dst);
+#ifndef _WIN32
g_assert(!passFD ||
qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS));
g_assert(!passFD ||
qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS));
+#endif
g_assert(qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_SHUTDOWN));
g_assert(qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_SHUTDOWN));
@@ -263,10 +269,12 @@ static void test_io_channel(bool async,
test_io_channel_setup_sync(listen_addr, connect_addr,
&srv, &src, &dst);
+#ifndef _WIN32
g_assert(!passFD ||
qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_FD_PASS));
g_assert(!passFD ||
qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_FD_PASS));
+#endif
g_assert(qio_channel_has_feature(src, QIO_CHANNEL_FEATURE_SHUTDOWN));
g_assert(qio_channel_has_feature(dst, QIO_CHANNEL_FEATURE_SHUTDOWN));
@@ -367,7 +375,7 @@ static void test_io_channel_ipv6_async(void)
}
-#ifndef _WIN32
+#ifdef CONFIG_AF_UNIX
static void test_io_channel_unix(bool async)
{
SocketAddress *listen_addr = g_new0(SocketAddress, 1);
@@ -398,6 +406,7 @@ static void test_io_channel_unix_async(void)
return test_io_channel_unix(true);
}
+#ifndef _WIN32
static void test_io_channel_unix_fd_pass(void)
{
SocketAddress *listen_addr = g_new0(SocketAddress, 1);
@@ -491,6 +500,7 @@ static void test_io_channel_unix_fd_pass(void)
}
g_free(fdrecv);
}
+#endif /* _WIN32 */
static void test_io_channel_unix_listen_cleanup(void)
{
@@ -588,13 +598,15 @@ int main(int argc, char **argv)
test_io_channel_ipv6_async);
}
-#ifndef _WIN32
+#ifdef CONFIG_AF_UNIX
g_test_add_func("/io/channel/socket/unix-sync",
test_io_channel_unix_sync);
g_test_add_func("/io/channel/socket/unix-async",
test_io_channel_unix_async);
+#ifndef _WIN32
g_test_add_func("/io/channel/socket/unix-fd-pass",
test_io_channel_unix_fd_pass);
+#endif
g_test_add_func("/io/channel/socket/unix-listen-cleanup",
test_io_channel_unix_listen_cleanup);
#endif /* _WIN32 */
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 4/4] tests/unit: Update test-io-channel-socket.c for Windows
2022-07-30 14:50 ` [PATCH v3 4/4] tests/unit: Update test-io-channel-socket.c " Bin Meng
@ 2022-08-01 7:32 ` Marc-André Lureau
0 siblings, 0 replies; 9+ messages in thread
From: Marc-André Lureau @ 2022-08-01 7:32 UTC (permalink / raw)
To: Bin Meng; +Cc: qemu-devel, Bin Meng, Daniel P. Berrangé
[-- Attachment #1: Type: text/plain, Size: 4738 bytes --]
Hi
On Sat, Jul 30, 2022 at 6:53 PM Bin Meng <bmeng.cn@gmail.com> wrote:
> From: Bin Meng <bin.meng@windriver.com>
>
> Enable the following 3 test cases for Windows when AF_UNIX is available:
>
> * test_io_channel_unix_sync
> * test_io_channel_unix_async
> * test_io_channel_unix_listen_cleanup
>
The test should runtime-check the availability of AF_UNIX socket, and skip
those appropriately (not failing the test).
(for ex, in glib I wrote
https://gitlab.gnome.org/GNOME/glib/-/blob/main/gio/tests/gdbus-peer.c#L305)
> diff --git a/tests/unit/test-io-channel-socket.c
> b/tests/unit/test-io-channel-socket.c
> index 6713886d02..ec5df32489 100644
> --- a/tests/unit/test-io-channel-socket.c
> +++ b/tests/unit/test-io-channel-socket.c
> @@ -179,10 +179,12 @@ static void test_io_channel(bool async,
> test_io_channel_setup_async(listen_addr, connect_addr,
> &srv, &src, &dst);
>
> +#ifndef _WIN32
> g_assert(!passFD ||
> qio_channel_has_feature(src,
> QIO_CHANNEL_FEATURE_FD_PASS));
> g_assert(!passFD ||
> qio_channel_has_feature(dst,
> QIO_CHANNEL_FEATURE_FD_PASS));
> +#endif
> g_assert(qio_channel_has_feature(src,
> QIO_CHANNEL_FEATURE_SHUTDOWN));
> g_assert(qio_channel_has_feature(dst,
> QIO_CHANNEL_FEATURE_SHUTDOWN));
>
> @@ -206,10 +208,12 @@ static void test_io_channel(bool async,
> test_io_channel_setup_async(listen_addr, connect_addr,
> &srv, &src, &dst);
>
> +#ifndef _WIN32
> g_assert(!passFD ||
> qio_channel_has_feature(src,
> QIO_CHANNEL_FEATURE_FD_PASS));
> g_assert(!passFD ||
> qio_channel_has_feature(dst,
> QIO_CHANNEL_FEATURE_FD_PASS));
> +#endif
> g_assert(qio_channel_has_feature(src,
> QIO_CHANNEL_FEATURE_SHUTDOWN));
> g_assert(qio_channel_has_feature(dst,
> QIO_CHANNEL_FEATURE_SHUTDOWN));
>
> @@ -236,10 +240,12 @@ static void test_io_channel(bool async,
> test_io_channel_setup_sync(listen_addr, connect_addr,
> &srv, &src, &dst);
>
> +#ifndef _WIN32
> g_assert(!passFD ||
> qio_channel_has_feature(src,
> QIO_CHANNEL_FEATURE_FD_PASS));
> g_assert(!passFD ||
> qio_channel_has_feature(dst,
> QIO_CHANNEL_FEATURE_FD_PASS));
> +#endif
> g_assert(qio_channel_has_feature(src,
> QIO_CHANNEL_FEATURE_SHUTDOWN));
> g_assert(qio_channel_has_feature(dst,
> QIO_CHANNEL_FEATURE_SHUTDOWN));
>
> @@ -263,10 +269,12 @@ static void test_io_channel(bool async,
> test_io_channel_setup_sync(listen_addr, connect_addr,
> &srv, &src, &dst);
>
> +#ifndef _WIN32
> g_assert(!passFD ||
> qio_channel_has_feature(src,
> QIO_CHANNEL_FEATURE_FD_PASS));
> g_assert(!passFD ||
> qio_channel_has_feature(dst,
> QIO_CHANNEL_FEATURE_FD_PASS));
> +#endif
> g_assert(qio_channel_has_feature(src,
> QIO_CHANNEL_FEATURE_SHUTDOWN));
> g_assert(qio_channel_has_feature(dst,
> QIO_CHANNEL_FEATURE_SHUTDOWN));
>
> @@ -367,7 +375,7 @@ static void test_io_channel_ipv6_async(void)
> }
>
>
> -#ifndef _WIN32
> +#ifdef CONFIG_AF_UNIX
> static void test_io_channel_unix(bool async)
> {
> SocketAddress *listen_addr = g_new0(SocketAddress, 1);
> @@ -398,6 +406,7 @@ static void test_io_channel_unix_async(void)
> return test_io_channel_unix(true);
> }
>
> +#ifndef _WIN32
> static void test_io_channel_unix_fd_pass(void)
> {
> SocketAddress *listen_addr = g_new0(SocketAddress, 1);
> @@ -491,6 +500,7 @@ static void test_io_channel_unix_fd_pass(void)
> }
> g_free(fdrecv);
> }
> +#endif /* _WIN32 */
>
> static void test_io_channel_unix_listen_cleanup(void)
> {
> @@ -588,13 +598,15 @@ int main(int argc, char **argv)
> test_io_channel_ipv6_async);
> }
>
> -#ifndef _WIN32
> +#ifdef CONFIG_AF_UNIX
> g_test_add_func("/io/channel/socket/unix-sync",
> test_io_channel_unix_sync);
> g_test_add_func("/io/channel/socket/unix-async",
> test_io_channel_unix_async);
> +#ifndef _WIN32
> g_test_add_func("/io/channel/socket/unix-fd-pass",
> test_io_channel_unix_fd_pass);
> +#endif
> g_test_add_func("/io/channel/socket/unix-listen-cleanup",
> test_io_channel_unix_listen_cleanup);
> #endif /* _WIN32 */
>
The comments needs to be updated
--
Marc-André Lureau
[-- Attachment #2: Type: text/html, Size: 6092 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread