Am 05.08.2015 um 14:49 schrieb Paolo Bonzini: > On 05/08/2015 13:03, Stefan Weil wrote: [...] >> slirp: Fix non blocking connect for w32 >> http://repo.or.cz/w/qemu/ar7.git/commit/b3f21d56ad3f36562d396685de8ff4981af6b805 > > The second looks good, but you do not need the #ifdef at all in theory. > If you do, other breakage is looming. > > Paolo
The new code was this: if ((tcp_fconnect(so) == -1) && #if defined(_WIN32) socket_error() != WSAEWOULDBLOCK #else (errno != EINPROGRESS) && (errno != EWOULDBLOCK) #endif ) { Without the preprocessor conditionals, Linux users would get an undefined WSAEWOULDBLOCK. And QEMU defines a macro EWOULDBLOCK which differs from the MinGW-w64 definition, at least in my Debian Jessie cross environment (10035 != 140): include/sysemu/os-win32.h: # define EWOULDBLOCK WSAEWOULDBLOCK /usr/share/mingw-w64/include/pthread.h: #define EWOULDBLOCK 140 /usr/share/mingw-w64/include/psdk_inc/_wsa_errnos.h: #define WSAEWOULDBLOCK (WSABASEERR + 35 ) That's only a problem if we get pthread.h when compiling for Windows. Can we be sure that this won't happen? It looks like Windows + MinGW(-w64) is a moving target which is not so easy to handle. Maybe it would be better to change tcp_fconnect() to return an ANSI error code (with a conversion from Windows error codes in that function). Or we introduce a wrapper for connect(), qemu_connect(). Stefan