X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fos-ip.c;h=cf56ae8a6434e74c7f3df6c1c79faf42e6b5cf32;hb=e0691dfbc07d0b2a0e6bec528b33802ed04f5960;hp=140f333e749b15442141ad184fbc26bd74ee15f7;hpb=1b41dfbce0730bb82fe44e315313d0b35079a7dd;p=openldap diff --git a/libraries/libldap/os-ip.c b/libraries/libldap/os-ip.c index 140f333e74..cf56ae8a64 100644 --- a/libraries/libldap/os-ip.c +++ b/libraries/libldap/os-ip.c @@ -25,19 +25,6 @@ #include #endif /* HAVE_IO_H */ -#if defined( HAVE_FCNTL_H ) -#include -#ifndef O_NONBLOCK -#define O_NONBLOCK O_NDELAY -#endif -#endif /* HAVE_FCNTL_H */ - -#if defined( HAVE_SYS_FILIO_H ) -#include -#elif defined( HAVE_SYS_IOCTL_H ) -#include -#endif - #include "ldap-int.h" int ldap_int_tblsize = 0; @@ -96,31 +83,14 @@ static int ldap_pvt_ndelay_on(LDAP *ld, int fd) { osip_debug(ld, "ldap_ndelay_on: %d\n",fd,0,0); -#ifdef notyet -/* #if defined( HAVE_FCNTL_H ) */ - return fcntl(fd,F_SETFL,fcntl(fd,F_GETFL,0) | O_NONBLOCK); -#else -{ - ioctl_t status = 1; - return ioctl( fd, FIONBIO, (caddr_t)&status ); -} -#endif - return 0; + return ber_pvt_socket_set_nonblock( fd, 1 ); } static int ldap_pvt_ndelay_off(LDAP *ld, int fd) { osip_debug(ld, "ldap_ndelay_off: %d\n",fd,0,0); -#ifdef notyet -/* #if defined( HAVE_FCNTL_H ) */ - return fcntl(fd,F_SETFL,fcntl(fd,F_GETFL,0) & ~O_NONBLOCK); -#else -{ - ioctl_t status = 0; - return ioctl( fd, FIONBIO, (caddr_t)&status ); -} -#endif + return ber_pvt_socket_set_nonblock( fd, 0 ); } static ber_socket_t @@ -146,13 +116,22 @@ ldap_pvt_prepare_socket(LDAP *ld, int fd) #ifdef TCP_NODELAY { int dummy = 1; - if ( setsockopt(fd,IPPROTO_TCP,TCP_NODELAY,&dummy,sizeof(dummy)) == -1 ) + if ( setsockopt( fd, IPPROTO_TCP, TCP_NODELAY, (char*) &dummy, sizeof(dummy) ) == -1 ) return -1; } #endif return 0; } +#undef TRACE +#define TRACE do { \ + osip_debug(ld, \ + "ldap_is_socket_ready: errror on socket %d: errno: %d (%s)\n", \ + s, \ + errno, \ + strerror(errno) ); \ +} while( 0 ) + /* * check the socket for errors after select returned. */ @@ -161,22 +140,13 @@ ldap_pvt_is_socket_ready(LDAP *ld, int s) { osip_debug(ld, "ldap_is_sock_ready: %d\n",s,0,0); -#define TRACE \ -{ \ - osip_debug(ld, \ - "ldap_is_socket_ready: errror on socket %d: errno: %d (%s)\n", \ - s, \ - errno, \ - strerror(errno) ); \ -} - -#ifdef notyet -/* #ifdef SO_ERROR */ +#if defined( notyet ) /* && defined( SO_ERROR ) */ { int so_errno; int dummy = sizeof(so_errno); - if ( getsockopt(s,SOL_SOCKET,SO_ERROR,&so_errno,&dummy) == -1 ) + if ( getsockopt( s, SOL_SOCKET, SO_ERROR, &so_errno, &dummy ) == -1 ) { return -1; + } if ( so_errno ) { ldap_pvt_set_errno(so_errno); TRACE; @@ -190,23 +160,24 @@ ldap_pvt_is_socket_ready(LDAP *ld, int s) struct sockaddr_in sin; char ch; int dummy = sizeof(sin); - if ( getpeername(s, (struct sockaddr *) &sin, &dummy) == -1 ) { + if ( getpeername( s, (struct sockaddr *) &sin, &dummy ) == -1 ) { + /* XXX: needs to be replace with ber_stream_read() */ read(s, &ch, 1); #ifdef HAVE_WINSOCK ldap_pvt_set_errno( WSAGetLastError() ); #endif TRACE; return -1; - } + } return 0; } #endif return -1; -#undef TRACE } +#undef TRACE static int -ldap_pvt_connect(LDAP *ld, int s, struct sockaddr_in *sin, int async) +ldap_pvt_connect(LDAP *ld, ber_socket_t s, struct sockaddr_in *sin, int async) { struct timeval tv, *opt_tv=NULL; fd_set wfds, *z=NULL; @@ -233,16 +204,18 @@ ldap_pvt_connect(LDAP *ld, int s, struct sockaddr_in *sin, int async) ldap_pvt_set_errno( WSAGetLastError() ); #endif - if ( (errno != EINPROGRESS) && (errno != EWOULDBLOCK) ) + if ( errno != EINPROGRESS && errno != EWOULDBLOCK ) { return ( -1 ); + } #ifdef notyet if ( async ) return ( -2 ); #endif - FD_ZERO(&wfds); FD_SET(s, &wfds ); + FD_ZERO(&wfds); + FD_SET(s, &wfds ); - if ( select(s + 1, z, &wfds, z, opt_tv ? &tv : NULL) == -1) + if ( select(ldap_int_tblsize, z, &wfds, z, opt_tv ? &tv : NULL) == -1) return ( -1 ); if ( FD_ISSET(s, &wfds) ) { @@ -257,23 +230,18 @@ ldap_pvt_connect(LDAP *ld, int s, struct sockaddr_in *sin, int async) return ( -1 ); } -static int -ldap_pvt_inet_aton( LDAP *ld, const char *host, struct in_addr *in) -{ -#ifdef notyet -/* #ifdef HAVE_INET_ATON */ - return inet_aton( host, in ); -#else +#ifndef HAVE_INET_ATON +int +ldap_pvt_inet_aton( const char *host, struct in_addr *in) { unsigned long u = inet_addr( host ); if ( u != 0xffffffff || u != (unsigned long) -1 ) { in->s_addr = u; return 1; } -} -#endif return 0; } +#endif int @@ -291,7 +259,7 @@ ldap_connect_to_host(LDAP *ld, Sockbuf *sb, const char *host, osip_debug(ld, "ldap_connect_to_host\n",0,0,0); if (host != NULL) { - if (! ldap_pvt_inet_aton( ld, host, &in) ) { + if (! inet_aton( host, &in) ) { rc = ldap_pvt_gethostbyname_a(host, &he_buf, &ha_buf, &hp, &local_h_errno);