From: Marc-André Lureau <marcandre.lureau@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