This series started out as an attempt to fix the Win32 problems identified by Andrew Baumann
https://lists.gnu.org/archive/html/qemu-devel/2016-03/msg01343.html It turned into a significantly larger cleanup of some chardev and osdep win32 portability code. Patch 1 addresses Andrew's 2nd stated problem - handling of getpeername() failures, by fixing errno handling on Win32. Patches 2-7 do some fixes in the test-io-channel-socket test case so that it is able to run on Win32. Patches 8-12 are some fixes for the QIOChannel code Patch 13 is the big one that changes QIOChannelSocket so that it uses a Win32 specific GSource implementation for creating watches. This is the key fix for Andrew's 1st stated problem. At this point tests/test-io-channel-socket passes and qemu-system-x86_64.exe -serial tcp:127.0.0.1:9000,server,nowait -device sga -display non works on win32 once more. Patches 14-16 are some cleanups to the chardev code to improve its clarity. They are not required for fixing any real problem Patches 17-18 change the way we provide Win32 portability for sockets APIs inside QEMU. These do fix a number of bugs in the QEMU code related to mistaken use of errno instead of socket_error(). None of these bugs appear to be critical issues. Based on this, I'm proposing 1-13 for QEMU 2.6 release as they fix critical win32 bugs. Patches 14-18 can either be included in 2.6 or 2.7 - I'm ambivalent on which, since they're cleanups / minor fixes. Changed in v2: - Set event flags in qio_channel_socket_set_blocking instead of when creating GSource - Drop now uneeded patches that set QIOChanel to blocking mode - Change WSAEWOULDBLOCK into EAGAIN to avoid needing to check EWOULDBLOCK - Drop patches that replaced qemu_accept/qemu_socket - Drop wrapping of close/ioctl in favour of closesocket/ ioctlsocket. Daniel P. Berrange (15): osdep: fix socket_error() to work with Mingw64 io: use bind() to check for IPv4/6 availability io: initialize sockets in test program io: bind to socket before creating QIOChannelSocket io: wait for incoming client in socket test io: set correct error object in background reader test thread io: assert errors before asserting content in I/O test io: fix copy+paste mistake in socket error message io: use qemu_accept to ensure SOCK_CLOEXEC is set io: remove checking of EWOULDBLOCK char: remove qemu_chr_finish_socket_connection method char: remove socket_try_connect method char: remove qemu_chr_open_socket_fd method osdep: add wrappers for socket functions osdep: remove use of socket_error() from all code Paolo Bonzini (3): io: pass HANDLE to g_source_add_poll on Win32 io: introduce qio_channel_create_socket_watch io: implement socket watch for win32 using WSAEventSelect+select Makefile | 4 +- block/sheepdog.c | 5 +- include/io/channel-watch.h | 20 ++- include/io/channel.h | 3 + include/qemu/sockets.h | 17 --- include/sysemu/os-posix.h | 9 ++ include/sysemu/os-win32.h | 106 ++++++++++++---- io/channel-command.c | 6 +- io/channel-file.c | 6 +- io/channel-socket.c | 84 ++++++++----- io/channel-watch.c | 152 +++++++++++++++++++++- io/channel.c | 14 +++ linux-user/flatload.c | 1 - migration/qemu-file-unix.c | 14 +-- migration/tcp.c | 7 +- net/socket.c | 19 ++- qemu-char.c | 96 ++++++-------- slirp/slirp.h | 2 - slirp/tcp_input.c | 4 - tests/io-channel-helpers.c | 6 +- tests/test-io-channel-socket.c | 92 +++++++------- util/oslib-win32.c | 280 ++++++++++++++++++++++++++++++++++++++++- util/qemu-coroutine-io.c | 6 +- util/qemu-sockets.c | 10 +- 24 files changed, 719 insertions(+), 244 deletions(-) -- 2.5.0