]> git.sur5r.net Git - openldap/blobdiff - libraries/liblber/sockbuf.c
Merge remote-tracking branch 'origin/mdb.RE/0.9'
[openldap] / libraries / liblber / sockbuf.c
index cbcaa9b5ea04141f1c6ffe1f5586a73a6579ae3b..7a26b9a00fb90fe9e5f2927a796d042144daa52c 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2015 The OpenLDAP Foundation.
+ * Copyright 1998-2017 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -928,6 +928,7 @@ sb_dgram_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len )
 {
        ber_slen_t rc;
        struct sockaddr *dst;
+       socklen_t dstsize;
    
        assert( sbiod != NULL );
        assert( SOCKBUF_VALID( sbiod->sbiod_sb ) );
@@ -936,9 +937,12 @@ sb_dgram_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len )
        dst = buf;
        buf = (char *) buf + sizeof( struct sockaddr_storage );
        len -= sizeof( struct sockaddr_storage );
-   
-       rc = sendto( sbiod->sbiod_sb->sb_fd, buf, len, 0, dst,
-               sizeof( struct sockaddr_storage ) );
+       dstsize = dst->sa_family == AF_INET ? sizeof( struct sockaddr_in )
+#ifdef LDAP_PF_INET6
+               : dst->sa_family == AF_INET6 ? sizeof( struct sockaddr_in6 )
+#endif
+               : sizeof( struct sockaddr_storage );
+       rc = sendto( sbiod->sbiod_sb->sb_fd, buf, len, 0, dst, dstsize );
 
        if ( rc < 0 ) return -1;