X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Ftcpip.c;h=8ffdfe80012246a4cab7c5fea1d073d93a0af39e;hp=af2d8132c2cecf6564434c863f9bf59f3c3800bd;hb=4f8ea8cfaf2f3d95e4efcf9494526c2b4be43eb8;hpb=11dbebdf973d652e486f2b5e457cc46d1478556f diff --git a/src/tcpip.c b/src/tcpip.c index af2d813..8ffdfe8 100644 --- a/src/tcpip.c +++ b/src/tcpip.c @@ -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 @@ -26,10 +26,17 @@ #endif #ifdef WIN32 + +/* VS 2003 or later has getaddrinfo; older versions do not */ #include +#if _MSC_VER >= 1300 #include #define HAVE_GETADDRINFO 1 #else +#define HAVE_GETADDRINFO 0 +#endif + +#else #include #include #include @@ -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)