#include <yaz/tcpip.h>
#include <yaz/errno.h>
+#ifndef WIN32
#define RESOLVER_THREAD 1
+#endif
static void tcpip_close(COMSTACK h);
static int tcpip_put(COMSTACK h, char *buf, int size);
sp->port = 0;
#endif
sp->ai = 0;
+ sp->ai_connect = 0;
#endif
sp->altbuf = 0;
sp->altsize = sp->altlen = 0;
close(sp->pipefd[0]);
close(sp->pipefd[1]);
sp->pipefd[0] = -1;
+ h->iofile = -1;
return create_net_socket(h);
}
+#endif
+
void *tcpip_straddr(COMSTACK h, const char *str)
{
tcpip_state *sp = (tcpip_state *)h->cprivate;
else
port = "80";
}
-
- if (sp->pipefd[0] != -1)
- return 0;
- if (pipe(sp->pipefd) == -1)
- return 0;
-
- sp->port = port;
- xfree(sp->hoststr);
- sp->hoststr = xstrdup(str);
- sp->thread_id = yaz_thread_create(resolver_thread, h);
- return sp->hoststr;
-}
-
-#else
-
-void *tcpip_straddr(COMSTACK h, const char *str)
-{
- tcpip_state *sp = (tcpip_state *)h->cprivate;
- const char *port = "210";
- struct addrinfo *ai = 0;
- if (h->protocol == PROTO_HTTP)
+#if RESOLVER_THREAD
+ if (h->flags & CS_FLAGS_DNS_NO_BLOCK)
{
- if (h->type == ssl_type)
- port = "443";
- else
- port = "80";
- }
- if (!tcpip_init())
- return 0;
+ if (sp->pipefd[0] != -1)
+ return 0;
+ if (pipe(sp->pipefd) == -1)
+ return 0;
+ sp->port = port;
+ xfree(sp->hoststr);
+ sp->hoststr = xstrdup(str);
+ sp->thread_id = yaz_thread_create(resolver_thread, h);
+ return sp->hoststr;
+ }
+#endif
if (sp->ai)
freeaddrinfo(sp->ai);
sp->ai = tcpip_getaddrinfo(str, port, &sp->ipv6_only);
{
return create_net_socket(h);
}
- return ai;
+ return sp->ai;
}
-#endif
-
#else
void *tcpip_straddr(COMSTACK h, const char *str)
{
*/
int tcpip_rcvconnect(COMSTACK h)
{
-#if HAVE_GNUTLS_H
tcpip_state *sp = (tcpip_state *)h->cprivate;
-#endif
TRC(fprintf(stderr, "tcpip_rcvconnect\n"));
if (h->state == CS_ST_DATAXFER)
tcpip_state *sp = (struct tcpip_state *)h->cprivate;
TRC(fprintf(stderr, "tcpip_close: h=%p pid=%d\n", h, getpid()));
+#if HAVE_GETADDRINFO
+#if RESOLVER_THREAD
+ if (sp->pipefd[0] != -1)
+ {
+ yaz_thread_join(&sp->thread_id, 0);
+ close(sp->pipefd[0]);
+ close(sp->pipefd[1]);
+ h->iofile = -1;
+ }
+#endif
+#endif
if (h->iofile != -1)
{
#if HAVE_GNUTLS_H