X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=comstack%2Ftcpip.c;h=4abb057d70edbb5491e8f9310b5141522c5a1bce;hb=b08d68a3edac5a93dce61f98d2f030ea722311c4;hp=311b6e2ca5b42d4c099a391b0ac4af794a94b034;hpb=d83cfde85ccff3bfb2d45515516c9c15bc785ebb;p=yaz-moved-to-github.git diff --git a/comstack/tcpip.c b/comstack/tcpip.c index 311b6e2..4abb057 100644 --- a/comstack/tcpip.c +++ b/comstack/tcpip.c @@ -2,7 +2,7 @@ * Copyright (c) 1995-2002, Index Data * See the file LICENSE for details. * - * $Id: tcpip.c,v 1.45 2002-01-21 21:50:32 adam Exp $ + * $Id: tcpip.c,v 1.50 2002-09-25 12:37:07 adam Exp $ */ #include @@ -13,6 +13,7 @@ #endif #include #include +#include #if HAVE_OPENSSL_SSL_H #include #include @@ -52,6 +53,10 @@ void *tcpip_straddr(COMSTACK h, const char *str); #define TRC(X) #endif +#ifndef YAZ_SOCKLEN_T +#define YAZ_SOCKLEN_T int +#endif + /* this state is used for both SSL and straight TCP/IP */ typedef struct tcpip_state { @@ -125,10 +130,17 @@ COMSTACK tcpip_type(int s, int blocking, int protocol, void *vp) #ifdef WIN32 if (!(p->blocking = blocking) && ioctlsocket(s, FIONBIO, &tru) < 0) + return 0; #else - if (!(p->blocking = blocking) && fcntl(s, F_SETFL, O_NONBLOCK) < 0) + if (!(p->blocking = blocking)) + { + if (fcntl(s, F_SETFL, O_NONBLOCK) < 0) + return 0; +#ifndef MSG_NOSIGNAL + signal (SIGPIPE, SIG_IGN); +#endif + } #endif - return 0; p->io_pending = 0; p->iofile = s; @@ -298,7 +310,7 @@ int tcpip_connect(COMSTACK h, void *address) return 1; } #else - if (errno == EINPROGRESS) + if (yaz_errno() == EINPROGRESS) { h->event = CS_CONNECT; h->state = CS_ST_CONNECTING; @@ -441,11 +453,7 @@ int tcpip_listen(COMSTACK h, char *raddr, int *addrlen, void *cd) { struct sockaddr_in addr; -#ifdef __cplusplus - socklen_t len = sizeof(addr); -#else - int len = sizeof(addr); -#endif + YAZ_SOCKLEN_T len = sizeof(addr); TRC(fprintf(stderr, "tcpip_listen pid=%d\n", getpid())); if (h->state != CS_ST_IDLE) @@ -460,10 +468,10 @@ int tcpip_listen(COMSTACK h, char *raddr, int *addrlen, #ifdef WIN32 WSAGetLastError() == WSAEWOULDBLOCK #else - errno == EWOULDBLOCK + yaz_errno() == EWOULDBLOCK #ifdef EAGAIN #if EAGAIN != EWOULDBLOCK - || errno == EAGAIN + || yaz_errno() == EAGAIN #endif #endif #endif @@ -664,19 +672,22 @@ int tcpip_get(COMSTACK h, char **buf, int *bufsize) else return -1; #else - if (errno == EWOULDBLOCK + if (yaz_errno() == EWOULDBLOCK #ifdef EAGAIN #if EAGAIN != EWOULDBLOCK - || errno == EAGAIN + || yaz_errno() == EAGAIN +#endif #endif + || yaz_errno() == EINPROGRESS +#ifdef __sun__ + || yaz_errno() == ENOENT /* Sun's sometimes set errno to this */ #endif - || errno == EINPROGRESS ) { h->io_pending = CS_WANT_READ; break; } - else if (errno == 0) + else if (yaz_errno() == 0) continue; else return -1; @@ -836,10 +847,10 @@ int tcpip_put(COMSTACK h, char *buf, int size) #ifdef WIN32 WSAGetLastError() == WSAEWOULDBLOCK #else - errno == EWOULDBLOCK + yaz_errno() == EWOULDBLOCK #ifdef EAGAIN #if EAGAIN != EWOULDBLOCK - || errno == EAGAIN + || yaz_errno() == EAGAIN #endif #endif #endif @@ -957,7 +968,7 @@ char *tcpip_addrstr(COMSTACK h) struct sockaddr_in addr; tcpip_state *sp = (struct tcpip_state *)h->cprivate; char *r, *buf = sp->buf; - size_t len; + YAZ_SOCKLEN_T len; struct hostent *host; len = sizeof(addr);