[Help-gnutls] Re: Build gnutls on windows

Martin Lambers marlam at marlam.de
Fri Sep 23 21:35:17 CEST 2005

On Fri, 23. Sep 2005, 00:46:27 +0200, Simon Josefsson wrote:
> > Reasonable POSIX support on Win32 is not just a collection of fixes for
> > minor misbehaviour; it is a major task. Perhaps it would be better to
> > leave that to an external project and only support "MinGW + plibc" (or
> > something similar) as a target platform.
> Yes, I think you are right.  However, it isn't impossible to integrate
> something like plibc in gnulib, or in GnuTLS itself.  Then the GnuTLS
> core code will be good and the resulting binaries should run properly
> too.  I'm not sure GnuTLS need a lot from POSIX, perhaps we can even
> integrate the plibc functions we need in GnuTLS.

Judging from some quick greps, I think at least the following is
necessary to get rid of #ifdef _WIN32:

- Integration of existing gnulib modules:
  - inet_ntop

- New gnulib modules for missing headers:
  - <sys/socket.h>
  - <netinet/in.h>
  - <arpa/inet.h>
  - <netdb.h>

- New gnulib modules to make socket functions set errno, provide
  the missing errnos such as ECONNREFUSED, and provide a strerror() that
  understands these additional errnos.
  - select()
  - connect()
  - accept()
  - recv()
  - send()
  - ...

- New gnulib modules to make some functions work with sockets:
  - close()
  - fcntl() which handles O_NONBLOCK for sockets

- Call WSAStartup() / WSACleanup() somewhere without having them in the
  main code.

- Non-networking issues:
  - getpwuid(), getuid()
  - signal handling:
    Using SIGALARM for network timeouts could be replaced by using
    setsockopt with SO_RCVTIMEO and SO_SNDTIMEO. But this does not work on
    Windows <= 2000 and on several UNIX versions including Solaris. It does
    work on GNU/Linux and *BSD.

I'm sorry to say that I currently don't have enough spare time to be
able to work on these things.

> Btw, have you tested to run a mingw32 built gnutls-cli on a Windows
> platform?  It shouldn't be too hard to test it to see whether it works
> or almost works.

It does not. I tested
$ gnutls-cli.exe --print-cert --port 25 --starttls some.smtp.server
It hangs after printing "Simple Client Mode:".  That's because select()
is called and the test after the call assumes that errno is set. This
results in an endless loop.


More information about the Gnutls-help mailing list