[Help-gnutls] Re: Build gnutls on windows
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:
- New gnulib modules for missing headers:
- 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.
- New gnulib modules to make some functions work with sockets:
- fcntl() which handles O_NONBLOCK for sockets
- Call WSAStartup() / WSACleanup() somewhere without having them in the
- 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