- rc = ldap_connect_to_host( ld, sb, srv->lud_host, addr, port, async );
- if ( rc == -1 ) {
- return( rc );
+ switch ( srv->lud_protocol ) {
+ case LDAP_PROTO_TCP:
+ rc = ldap_connect_to_host( ld, sb, srv->lud_host,
+ addr, port, async );
+ if ( rc == -1 )
+ return rc;
+ ber_sockbuf_add_io( sb, &ber_sockbuf_io_tcp,
+ LBER_SBIOD_LEVEL_PROVIDER, NULL );
+ break;
+ case LDAP_PROTO_UDP:
+ rc = ldap_connect_to_host( ld, sb, srv->lud_host,
+ addr, port, async );
+ if ( rc == -1 )
+ return rc;
+ ber_sockbuf_add_io( sb, &ber_sockbuf_io_udp,
+ LBER_SBIOD_LEVEL_PROVIDER, NULL );
+ break;
+#ifdef LDAP_PF_LOCAL
+ case LDAP_PROTO_LOCAL:
+ rc = ldap_connect_to_path( ld, sb, srv->lud_host,
+ async );
+ if ( rc == -1 )
+ return rc;
+ ber_sockbuf_add_io( sb, &ber_sockbuf_io_fd,
+ LBER_SBIOD_LEVEL_PROVIDER, NULL );
+ break;
+#endif /* LDAP_PF_LOCAL */
+ default:
+ return -1;
+ break;