X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fos-ip.c;h=2eb1c02eff228ad67b32453ea7679677b77770d7;hb=403f4479bc9f9a864122d4aeecf7284408918302;hp=6bb3ac48214e530d3a4721378c6a1176b7b0d7eb;hpb=b3ce9d497c66896dde504a14fcc28770288ceaf9;p=openldap diff --git a/libraries/libldap/os-ip.c b/libraries/libldap/os-ip.c index 6bb3ac4821..2eb1c02eff 100644 --- a/libraries/libldap/os-ip.c +++ b/libraries/libldap/os-ip.c @@ -1,3 +1,4 @@ +/* $OpenLDAP$ */ /* * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file @@ -25,19 +26,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; @@ -86,7 +74,7 @@ ldap_int_timeval_dup( struct timeval **dest, const struct timeval *src ) return 1; } - SAFEMEMCPY( (char *) new, (char *) src, sizeof(struct timeval)); + SAFEMEMCPY( (char *) new, (const char *) src, sizeof(struct timeval)); *dest = new; return 0; @@ -96,31 +84,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, &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, &status ); -} -#endif + return ber_pvt_socket_set_nonblock( fd, 0 ); } static ber_socket_t @@ -153,6 +124,15 @@ ldap_pvt_prepare_socket(LDAP *ld, int fd) 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 +141,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,20 +161,21 @@ 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, ber_socket_t s, struct sockaddr_in *sin, int async) @@ -216,8 +188,8 @@ ldap_pvt_connect(LDAP *ld, ber_socket_t s, struct sockaddr_in *sin, int async) tv.tv_sec = opt_tv->tv_sec; } - osip_debug(ld, "ldap_connect_timeout: fd: %d tm: %d async: %d\n", - s, opt_tv ? tv.tv_sec : -1, async); + osip_debug(ld, "ldap_connect_timeout: fd: %d tm: %ld async: %d\n", + s, opt_tv ? tv.tv_sec : -1L, async); if ( ldap_pvt_ndelay_on(ld, s) == -1 ) return ( -1 ); @@ -244,7 +216,7 @@ ldap_pvt_connect(LDAP *ld, ber_socket_t s, struct sockaddr_in *sin, int async) 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) ) {