Warum kann ich den ipv6-Socket nicht an eine Linklocal-Adresse binden?

8
%Vor%

Wenn ich den obigen Code kompiliere und ausführe, bekomme ich:

%Vor%

und wenn ändern, um die ::1 zu binden und andere Sache unverändert im Quellcode, den Code zu lassen funktioniert! Könnten Sie mir sagen, was mit meinem Code nicht stimmt? Danke im Voraus.

    
Haiyuan Zhang 16.03.2010, 15:39
quelle

1 Antwort

13

Für verbindungslokale Adressen müssen Sie auch die Bereichs-ID der Netzwerkschnittstelle angeben, die mit der Adresse verknüpft ist ... etwa so:

%Vor%

Sie können gettifaddrs () verwenden, um die verschiedenen Bereichs-IDs zu finden, die auf Ihren Systemen verfügbar sind, und die Netzwerkschnittstellen, denen sie entsprechen.

(Ja, es ist ein Schmerz ... alternativ könnten Sie etwas wie "% en0" an das Ende der Zeichenfolge anhängen, die Sie an inet_pton () übergeben, und inet_pton () könnte die Arbeit für Sie erledigen.) Ich bin mir nicht sicher, ob inet_pton () diese Syntax beherrscht oder nicht)

    
Jeremy Friesner 16.03.2010, 16:42
quelle

Tags und Links