Ich habe in meiner Anwendung einen Fehler, der nicht reproduzierbar scheint. Ich habe eine TCP-Socket-Verbindung, die fehlgeschlagen ist und die Anwendung versucht, es erneut zu verbinden. Im zweiten Aufruf von connect(), der versucht, die Verbindung wiederherzustellen, bekam ich ein Fehlerresultat mit errno == EADDRNOTAVAIL, was die Manpage für connect() bedeutet: "Die angegebene Adresse ist auf dem lokalen Rechner nicht verfügbar."Warum würde connect() EADDRNOTAVAIL geben?
Mit Blick auf den Aufruf von connect() scheint das zweite Argument die Adresse zu sein, auf die sich der Fehler bezieht, aber wie ich es verstehe, ist dieses Argument die TCP-Socket-Adresse des Remote-Hosts, also bin ich verwirrt über die man-Seite, die sich auf die lokale Maschine bezieht. Ist diese Adresse für den Remote-TCP-Socket-Host nicht von meinem lokalen Computer verfügbar? Wenn ja, warum sollte das sein? Der Aufruf von connect() musste zum ersten Mal erfolgreich sein, bevor die Verbindung fehlgeschlagen ist, und es wurde versucht, die Verbindung erneut herzustellen und diesen Fehler zu erhalten. Die Argumente für connect() waren beide Male gleich.
Wäre dieser Fehler ein vorübergehender Fehler, der, wenn ich versucht hätte, wieder zu verbinden, verschwunden wäre, wenn ich lange genug gewartet hätte? Wenn nicht, wie sollte ich versuchen, mich von diesem Fehler zu erholen?
Ich habe ein ähnliches Problem in einem großen Redis-Cluster. Was ist dein Anwendungsfall? – Riccardo