diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2019-10-01 17:26:07 +0400 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2019-10-04 18:49:18 +0200 |
commit | f1cd5d41efe0eef5d536466ee17464368b028dd2 (patch) | |
tree | 54fc43c8b1b1588eca49f854b29f06e83e6f7dd6 /util | |
parent | 56f997500aabbc1435a8cd2ea7c39d92c02755b0 (diff) |
util: WSAEWOULDBLOCK on connect should map to EINPROGRESS
In general, WSAEWOULDBLOCK can be mapped to EAGAIN as done by
socket_error() (or EWOULDBLOCK). But for connect() with non-blocking
sockets, it actually means the operation is in progress:
https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-connect
"The socket is marked as nonblocking and the connection cannot be completed immediately."
(this is also the behaviour implemented by GLib GSocket)
This fixes socket_can_bind_connect() test on win32.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'util')
-rw-r--r-- | util/oslib-win32.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/util/oslib-win32.c b/util/oslib-win32.c index c62cd4328c..886e400d6a 100644 --- a/util/oslib-win32.c +++ b/util/oslib-win32.c @@ -585,7 +585,11 @@ int qemu_connect_wrap(int sockfd, const struct sockaddr *addr, int ret; ret = connect(sockfd, addr, addrlen); if (ret < 0) { - errno = socket_error(); + if (WSAGetLastError() == WSAEWOULDBLOCK) { + errno = EINPROGRESS; + } else { + errno = socket_error(); + } } return ret; } |