diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c
index d60f875f3a79dff6e019fc9f55f4b2ce05a8c534..9d260fc240913315f6ed5ed18fe5ed1aceb42e3c 100644
--- a/servers/slapd/daemon.c
+++ b/servers/slapd/daemon.c
@@ -743,6 +743,24 @@ static int slap_open_listener(
 			break;
 #ifdef LDAP_PF_INET6
 		case AF_INET6:
+#ifdef IPV6_V6ONLY
+			/* Try to use IPv6 sockets for IPv6 only */
+			tmp = 1;
+			rc = setsockopt( l.sl_sd, IPPROTO_IPV6, IPV6_V6ONLY,
+					 (char *) &tmp, sizeof(tmp) );
+			if ( rc == AC_SOCKET_ERROR ) {
+				int err = sock_errno();
+#ifdef NEW_LOGGING
+				LDAP_LOG(( "connection", LDAP_LEVEL_INFO,
+					   "slap_open_listener: setsockopt( %ld, IPV6_V6ONLY ) failed errno %d (%s)\n",
+					   (long)l.sl_sd, err, sock_errstr(err) ));
+#else
+				Debug( LDAP_DEBUG_ANY,
+				       "slapd(%ld): setsockopt(IPV6_V6ONLY) failed errno=%d (%s)\n",
+				       (long) l.sl_sd, err, sock_errstr(err) );
+#endif
+			}
+#endif
 			addrlen = sizeof(struct sockaddr_in6);
 			break;
 #endif