On Sat, Nov 20, 2010 at 06:10:21PM +0100, Matthias Bolte wrote:
gnulib wraps Windows' SOCKET handle based send() and recv()
functions
into file descriptor based ones that are use in libvirt. By default
GnuTLS uses the SOCKET handle based send() and recv() on Windows. This
makes gnutls_handshake() fail internally with a WSAENOTSOCK error because
libvirt passes a file descriptor; GnuTLS needs the SOCKET handle.
This doesn't entirely make any sense to me. GNUTLS also uses GNULIB,
including all its socket wrappers for send/recv. If the push/pull
function is NULL, gnulib does this
if (session->internals._gnutls_push_func == NULL)
{
i = send (GNUTLS_POINTER_TO_INT (fd), &ptr[n - left], left, 0);
And this 'send' impl maps to GNULIBs replacement in GNUTLS tree, which
is identical to libvirt's 'send' impl
So AFAICT, the syscall behaviour will be identical both with & without
your proposed patch.
The only potential difference I can see is that when push/pull are
NULL, GNUTLS calls into WSAGetLastError (); to set the errno
which is somewhat redundant as GNULIB has already called that and
used it to set errno.
Daniel