Wenn Du Dich nicht auskennst, dann sag doch einfach nix
Schau Dir den source code einfach mal an und Du wirst feststellen, daß oscam bei einem Fehlschlag nicht einfach die nächste IP nimmt, wenn der Server mehrere hat, sondern wieder neu auflöst (und dabei meistens das selbe Ergebnis erhält).
Es ist ganz simpel: Wenn oscam auflöst, dann erhält oscam eigentlich ein Array mit allen IPs, er verarbeitet aber nur das erste Element daraus weiter.
In der eigentlichen Verbindungsfunktion kennt oscam dann folglich auch nur diese eine.
Das ist ein struktureller Denkfehler bei der Programmierung:
Anstatt einfach das Array zu behalten und mit einer for-Schleife darüber zu laufen bis eine Verbindung aufgebaut wurde (und dann break) bzw. ggf. erst am Ende der Schleife zu scheitern, beschränkt es sich schon vorher und kann dann beim Verbinden gar nicht mehr anders.
Springt er beim erneuten Versuch wieder in die Funktion zur Namensauflösung, dann weiß diese ja nicht mehr, welche IP(s) er schon probiert hatte und liefert i.d.R. dieselbe.
Man kann denselben Fehler hier im busybox-Code besser sehen, weil in einer einzigen Datei gebündelt:
Sie müssen registriert sein, um Links zu sehen.
Die Funktion xconnect bekommt genau eine IP-Adresse ...
Sie müssen registriert sein, um Links zu sehen.
... und Du wirst feststellen, daß sie auch an keiner Stelle einfach wiederholt mit weiteren Adressen aufgerufen wird, falls die Verbindung scheitert.
Man kann das sehr schön sehen, wenn man einen ungepatchten Busybox mit aktivem "PREFER_IPV4_ADDRESS" auf einem IPv6-only-System benutzt:
busybox-wget kriegt keine Verbindung mehr hin, weil PREFER_IPV4_ADDRESS als FORCE_IPV4_ADDRESS programmiert wurde, die funktionierende IPv6 verwirft xconnect.c und beharkt die nicht erreichbare IPv4.
Wäre es sauber und ordentlich programmiert, dann hieße "PREFER_IPV4_ADDRESS" auch nur genau das, also "PREFER = bevorzugen" und er würde es zwar zuerst per IPv4 versuchen, dann aber auch IPv6 nehmen (Und ohne PREFER_IPV4_ADRESS genau umgekehrt, wie es in den RFCs vorgesehen ist).
Woran man auch sehen kann, daß Linux-"Programmierer" das eigentlich nicht für 5 Cent können ist hier:
Das ist das Ergebnis echter Profi-Programmierer:
Code:
root@duo2 ~ # netstat -tn
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 fdff:affe:c0c0:0:21d:ecff:fe12:3456:445 fdff:affe:c0c0:0:96de:80ff:fe56:1234:9427 ESTABLISHED
Mein Windows-Rechner (fdff:affe:c0c0:0:96de:80ff:fe56:1234) hält sich an RFC 6724 und verbindet sich innerhalb des LANs bevorzugt über die ULA-Adresse.
Alle Samba-Shares
aller vier Boxen sind über die
ULA verbunden (Ich erspare mir das Cut'N'Paste von den drei anderen Boxen).
Nun einmal die umgekehrte Betrachtung, die Box verbindet zum Windows-Server:
Code:
root@duo2 ~ # netstat -tn
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 2001:db8:c001:0:21d:ecff:fe12:3456:41394 2001:db8:c001:0:96de:80ff:fe56:1234:445 ESTABLISHED
tcp 0 0 fdff:affe:c0c0:0:21d:ecff:fe12:3456:59968 fdff:affe:c0c0:0:96de:80ff:fe56:1234:445 ESTABLISHED
tcp 0 0 2001:db8:c001:0:21d:ecff:fe12:3456:41396 2001:db8:c001:0:96de:80ff:fe56:1234:445 ESTABLISHED
tcp 0 0 fdff:affe:c0c0:0:21d:ecff:fe12:3456:59970 fdff:affe:c0c0:0:96de:80ff:fe56:1234:445 ESTABLISHED
Wie man sieht, baut das Hobby-Programmierer-Geraffel die Verbindungen
rein nach dem Zufallsprinzip mal per ULA und mal per GLA auf, binnen Sekunden zum selben Server wohlgemerkt!