diff --git a/src/ChangeLog b/src/ChangeLog
index b0871e7d..473d4c64 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,11 @@
 2010-05-07  Giuseppe Scrivano  <gscrivano@gnu.org>
 
+	* gnutls.c (wgnutls_close): Use always `close', not `closesocket'.
+
+	* openssl.c (openssl_close): Use always `close', not `closesocket'.
+	(ssl_connect_wget): Get the real socket handle by FD_TO_SOCKET.
+	Define FD_TO_SOCKET if it is not yet defined.
+
 	* Makefile.am (libunittest_a_CPPFLAGS): Add -I$(top_builddir)/lib.
 
 	* mswindows.h: Always include <winsock2.h> and <ws2tcpip.h>.  Do not
diff --git a/src/gnutls.c b/src/gnutls.c
index af46171f..0bb49ca5 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -165,11 +165,7 @@ wgnutls_close (int fd, void *arg)
   /*gnutls_bye (ctx->session, GNUTLS_SHUT_RDWR);*/
   gnutls_deinit (ctx->session);
   xfree (ctx);
-#ifndef WINDOWS
   close (fd);
-#else
-  closesocket (fd);
-#endif
 }
 
 /* gnutls_transport is the singleton that describes the SSL transport
diff --git a/src/openssl.c b/src/openssl.c
index 1823f593..9bc59a5c 100644
--- a/src/openssl.c
+++ b/src/openssl.c
@@ -364,11 +364,7 @@ openssl_close (int fd, void *arg)
   xfree_null (ctx->last_error);
   xfree (ctx);
 
-#if defined(WINDOWS) || defined(USE_WATT32)
-  closesocket (fd);
-#else
   close (fd);
-#endif
 
   DEBUGP (("Closed %d/SSL 0x%0*lx\n", fd, PTR_FORMAT (conn)));
 }
@@ -401,7 +397,10 @@ ssl_connect_wget (int fd)
   conn = SSL_new (ssl_ctx);
   if (!conn)
     goto error;
-  if (!SSL_set_fd (conn, fd))
+#ifndef FD_TO_SOCKET
+# define FD_TO_SOCKET(x) (x)
+#endif
+  if (!SSL_set_fd (conn, FD_TO_SOCKET (fd)))
     goto error;
   SSL_set_connect_state (conn);
   if (SSL_connect (conn) <= 0 || conn->state != SSL_ST_OK)