• Daniel P. Berrange's avatar
    osdep: add wrappers for socket functions · a2d96af4
    Daniel P. Berrange authored
    
    
    The windows socket functions look identical to the normal POSIX
    sockets functions, but instead of setting errno, the caller needs
    to call WSAGetLastError(). QEMU has tried to deal with this
    incompatibility by defining a socket_error() method that callers
    must use that abstracts the difference between WSAGetLastError()
    and errno.
    
    This approach is somewhat error prone though - many callers of
    the sockets functions are just using errno directly because it
    is easy to forget the need use a QEMU specific wrapper. It is
    not always immediately obvious that a particular function will
    in fact call into Windows sockets functions, so the dev may not
    even realize they need to use socket_error().
    
    This introduces an alternative approach to portability inspired
    by the way GNULIB fixes portability problems. We use a macro to
    redefine the original socket function names to refer to a QEMU
    wrapper function. The wrapper function calls the original Win32
    sockets method and then sets errno from the WSAGetLastError()
    value.
    
    Thus all code can simply call the normal POSIX sockets APIs are
    have standard errno reporting on error, even on Windows. This
    makes the socket_error() method obsolete.
    
    We also bring closesocket & ioctlsocket into this approach. Even
    though they are non-standard Win32 names, we can't wrap the normal
    close/ioctl methods since there's no reliable way to distinguish
    between a file descriptor and HANDLE in Win32.
    
    Signed-off-by: default avatarDaniel P. Berrange <berrange@redhat.com>
    a2d96af4