Sockets an IPv6-Adressen binden

Ich versuche, einen Webserver zu schreiben, der sowohl IPv4- als auch IPv6-Adressen überwacht. Der Code, den ich ursprünglich geschrieben habe, funktionierte jedoch nicht. Dann fand ich heraus, dass die IPv6-Strukturen sowohl für IPv4 als auch für IPv6 funktionieren. Jetzt verwende ich die IPv6-Strukturen, aber nur die IPv4-Adressen funktionieren. Dieser Beitrag,warum kann ich ipv6 socket nicht an eine linklocal adresse binden, der gesagt hat, hinzuzufügenserver.sin6_scope_id = 5; Also habe ich das getan, aber es akzeptiert immer noch keine IPv6-Telnet-Verbindungen. Jede Hilfe wäre sehr dankbar, da ich völlig ratlos bin.
Vielen Dank!

Mein Code ist unten:

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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage