Fixed bug #830: pkg-config support. YAZ installs yaz.pc for Debian
[yaz-moved-to-github.git] / src / tcpip.c
index af2d813..8ffdfe8 100644 (file)
@@ -1,8 +1,8 @@
 /*
- * Copyright (C) 1995-2006, Index Data ApS
+ * Copyright (C) 1995-2007, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: tcpip.c,v 1.28 2006-09-06 15:01:53 adam Exp $
+ * $Id: tcpip.c,v 1.34 2007-01-19 10:28:42 adam Exp $
  */
 /**
  * \file tcpip.c
 #endif
 
 #ifdef WIN32
+
+/* VS 2003 or later has getaddrinfo; older versions do not */
 #include <winsock2.h>
+#if _MSC_VER >= 1300
 #include <ws2tcpip.h>
 #define HAVE_GETADDRINFO 1
 #else
+#define HAVE_GETADDRINFO 0
+#endif
+
+#else
 #include <netinet/in.h>
 #include <netdb.h>
 #include <arpa/inet.h>
@@ -322,10 +329,15 @@ void *tcpip_straddr(COMSTACK h, const char *str)
     sp->ai = tcpip_getaddrinfo(str, port);
     if (sp->ai && h->state == CS_ST_UNBND)
     {
-        int s;
+        int s = -1;
         struct addrinfo *ai = sp->ai;
-        s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
-        if (s < 0)
+        for (; ai; ai = ai->ai_next)
+        {
+            s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+            if (s != -1)
+                break;
+        }
+        if (s == -1)
             return 0;
         h->iofile = s;
         
@@ -354,7 +366,7 @@ void *tcpip_straddr(COMSTACK h, const char *str)
             return 0;
         h->iofile = s;
 
-        if (!tcpip_set_blocking(h, h->blocking))
+        if (!tcpip_set_blocking(h, h->flags))
             return 0;
     }
     return &sp->addr;
@@ -482,8 +494,8 @@ int tcpip_rcvconnect(COMSTACK h)
 #if HAVE_OPENSSL_SSL_H
     if (h->type == ssl_type && !sp->ctx)
     {
+        SSL_library_init();
         SSL_load_error_strings();
-        SSLeay_add_all_algorithms();
 
         sp->ctx = sp->ctx_alloc = SSL_CTX_new (SSLv23_method());
         if (!sp->ctx)
@@ -560,7 +572,7 @@ static int tcpip_bind(COMSTACK h, void *address, int mode)
 #ifdef WIN32
     BOOL one = 1;
 #else
-    unsigned long one = 1;
+    int one = 1;
 #endif
 
 #if HAVE_GETADDRINFO
@@ -574,8 +586,8 @@ static int tcpip_bind(COMSTACK h, void *address, int mode)
 #if HAVE_OPENSSL_SSL_H
     if (h->type == ssl_type && !sp->ctx)
     {
+        SSL_library_init();
         SSL_load_error_strings();
-        SSLeay_add_all_algorithms();
 
         sp->ctx = sp->ctx_alloc = SSL_CTX_new (SSLv23_method());
         if (!sp->ctx)