Enlace de sockets a direcciones IPv6

Estoy tratando de escribir un servidor web que escucha tanto en direcciones IPv4 como IPv6. Sin embargo, el código que escribí originalmente no funcionó. Luego descubrí que las estructuras de IPv6 funcionan tanto para IPv4 como para IPv6. Así que ahora uso las estructuras IPv6, sin embargo, solo funcionan las direcciones IPv4. Esta publicación,¿Por qué no puedo enlazar el socket ipv6 a una dirección linklocal, que decía agregarserver.sin6_scope_id = 5; así que hice eso pero todavía no acepta conexiones telnet IPv6. Cualquier ayuda sería muy apreciada porque estoy completamente perplejo.
¡Gracias!

Mi código está abajo:

void initialize_server(int port, int connections, char* address)
{
        struct sockaddr_in6 socket_struct;
        /*Creates the socket*/
        if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
        {
                syslog(LOG_ERR, "%s\n", strerror(errno));
                exit(EXIT_FAILURE);
        }/*Ends the socket creation*/

        /*Populates the socket address structure*/
                socket_struct.sin6_family = AF_INET6;

        if(address == NULL)
                socket_struct.sin6_addr=in6addr_any;
        else
        {
                inet_pton(AF_INET6, "fe80::216:3eff:fec3:3c22", (void *)&socket_struct.sin6_addr.s6_addr);
        }
        socket_struct.sin6_port =htons(port);
        socket_struct.sin6_scope_id = 0;
        if (bind(sock_fd, (struct sockaddr*) &socket_struct, sizeof(socket_struct)) < 0)
        {
                syslog(LOG_ERR, "%s\n", strerror(errno));
                exit(EXIT_FAILURE);
        }//Ends the binding.

        if (listen(sock_fd, connections) <0)
        {
                syslog(LOG_ERR, "%s\n", strerror(errno));
                exit(EXIT_FAILURE);
        }//Ends the listening function

}//ends the initialize server function.

Respuestas a la pregunta(2)

Su respuesta a la pregunta