]> git.sur5r.net Git - openldap/commitdiff
Provide set_nonblock code which acts upon ber_socket_t and use this
authorKurt Zeilenga <kurt@openldap.org>
Wed, 4 Aug 1999 18:29:59 +0000 (18:29 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Wed, 4 Aug 1999 18:29:59 +0000 (18:29 +0000)
as in sockbuf_set_nonblock code.  Allows -llber and -lldap to share
a common implementation.

libraries/liblber/lber-int.h
libraries/liblber/sockbuf.c

index ff5a1577eb84be2d4cf1bece18e2f6fca1f75ae7..b65553571df8f32541862fdeb2ced0f8f654a045 100644 (file)
@@ -270,5 +270,7 @@ ber_pvt_sb_udp_set_dst LDAP_P((Sockbuf *sb, void *addr ));
 LDAP_F(        void * )
 ber_pvt_sb_udp_get_src LDAP_P((Sockbuf *sb ));
 
+LDAP_F( int )
+ber_pvt_socket_set_nonblock LDAP_P(( ber_socket_t sd, int nb ));
 
 #endif /* _LBER_INT_H */
index b81235b9462f76001299f14b3904d88b581499b6..52b32040814001e76cd979e07216df9b284768e3 100644 (file)
@@ -644,6 +644,23 @@ int ber_pvt_sb_set_readahead( Sockbuf *sb, int rh )
    return 0;
 }
 
+int ber_pvt_socket_set_nonblock( ber_socket_t sd, int nb )
+{
+#if HAVE_FCNTL
+       int flags = fcntl(ber_pvt_sb_get_desc(sb), F_GETFL);
+       if( nb ) {
+               flags |= O_NONBLOCK;
+       } else {
+               flags &= ~O_NONBLOCK;
+       }
+       return fcntl( ber_pvt_sb_get_desc(sb), F_SETFL, flags );
+               
+#elif defined( FIONBIO )
+       ioctl_t status = nb ? 1 : 0;
+       return ioctl( sd, FIONBIO, &status );
+#endif
+}
+
 #define USE_NONBLOCK
 #ifdef USE_NONBLOCK
 int ber_pvt_sb_set_nonblock( Sockbuf *sb, int nb )
@@ -662,19 +679,11 @@ int ber_pvt_sb_set_nonblock( Sockbuf *sb, int nb )
       sb->sb_read_ahead = 0;
 #endif
    }
-   if (ber_pvt_sb_in_use(sb)) {
-#if HAVE_FCNTL
-               int flags = fcntl(ber_pvt_sb_get_desc(sb), F_GETFL);
-               flags |= O_NONBLOCK;
-               return fcntl(ber_pvt_sb_get_desc(sb), F_SETFL, flags);
-               
-#elif defined( FIONBIO )
-          /* WINSOCK requires the status to be a long */
-               ioctl_t status = (nb!=0);
-               return ioctl( ber_pvt_sb_get_desc(sb), FIONBIO, &status );
-#endif /* FIONBIO */
-   }
-   return 0;
+       if (ber_pvt_sb_in_use(sb)) {
+               return ber_pvt_socket_set_nonblock(
+                       ber_pvt_sb_get_desc(sb), nb );
+       }
+       return 0;
 }
 #endif