Hi

On Tue, Feb 21, 2023 at 4:48 PM <marcandre.lur...@redhat.com> wrote:
> From: Marc-André Lureau <marcandre.lur...@redhat.com>
>
> Hi,
>
> A win32 SOCKET handle is often cast to an int file descriptor, as this is
> what
> other OS use for sockets. When necessary, QEMU eventually queries whether
> it's a
> socket with the help of fd_is_socket(). However, there is no guarantee of
> conflict between the fd and SOCKET space. Such conflict would have
> surprising
> consequences. We can fix this by using FDs only.
>
> After fixing a few missed closesocket(), this patch series makes the win32
> socket API wrappers take FDs. It finally get rid of closesocket() usage by
> using
> a close() wrapper instead. (note that fdopen/fclose would not be enough
> either
> to close the underlying socket appropriately)
>
> v3:
> - fix closesocket() to prevent CloseHandle() from close()
> - fix direct closesocket() usage (#undef closesocket before)
> - add a test for &error_warn
> - add r-b tags
>
>
ping  (I am missing reviews, thanks)


> v2:
> - add clean up patch "util: drop qemu_fork()"
> - add a "&error_warn", to help with basic error reporting
> - fix errno handling after _get_osfhandle()
> - introduce qemu_socket_(un)select() helpers
> - add patch "aio_set_fd_handler() only supports SOCKET"
> - add meson slirp.wrap RFC
> - various misc cleanups
> - add r-b tags
>
> Marc-André Lureau (16):
>   util: drop qemu_fork()
>   tests: use closesocket()
>   io: use closesocket()
>   tests: add test-error-report
>   error: add global &error_warn destination
>   win32/socket: introduce qemu_socket_select() helper
>   win32/socket: introduce qemu_socket_unselect() helper
>   aio: make aio_set_fd_poll() static to aio-posix.c
>   aio/win32: aio_set_fd_handler() only supports SOCKET
>   RFC: build-sys: add slirp.wrap
>   main-loop: remove qemu_fd_register(), win32/slirp/socket specific
>   slirp: unregister the win32 SOCKET
>   slirp: open-code qemu_socket_(un)select()
>   win32: avoid mixing SOCKET and file descriptor space
>   os-posix: remove useless ioctlsocket() define
>   win32: replace closesocket() with close() wrapper
>
>  include/block/aio.h            |   8 --
>  include/qapi/error.h           |   6 +
>  include/qemu/main-loop.h       |   2 -
>  include/qemu/osdep.h           |  14 --
>  include/sysemu/os-posix.h      |   3 -
>  include/sysemu/os-win32.h      |  15 ++-
>  backends/tpm/tpm_emulator.c    |   6 +-
>  crypto/afalg.c                 |   6 +-
>  hw/hyperv/syndbg.c             |   4 +-
>  io/channel-socket.c            |   8 +-
>  io/channel-watch.c             |  10 +-
>  net/dgram.c                    |  14 +-
>  net/slirp.c                    |  16 ++-
>  net/socket.c                   |  22 +--
>  tests/qtest/libqtest.c         |   8 +-
>  tests/qtest/microbit-test.c    |   2 +-
>  tests/qtest/netdev-socket.c    |  10 +-
>  tests/unit/socket-helpers.c    |   2 +-
>  tests/unit/test-error-report.c | 139 +++++++++++++++++++
>  util/aio-posix.c               |   6 +-
>  util/aio-win32.c               |  23 ++--
>  util/error.c                   |  10 +-
>  util/main-loop.c               |  11 --
>  util/oslib-posix.c             |  70 ----------
>  util/oslib-win32.c             | 240 ++++++++++++++++++++++++++++-----
>  util/qemu-sockets.c            |  22 +--
>  .gitignore                     |   2 +
>  subprojects/slirp.wrap         |   6 +
>  tests/unit/meson.build         |   1 +
>  29 files changed, 461 insertions(+), 225 deletions(-)
>  create mode 100644 tests/unit/test-error-report.c
>  create mode 100644 subprojects/slirp.wrap
>
> --
> 2.39.2
>
>

Reply via email to