Wie kann ich performant in C feststellen, ob die Netzwerkverbindung zu einem anderen Rechner da ist. Bitte nicht system(ping...) vorschlagen. Ich möchte es mit C eigenen Sachen versuchen.
Besteht die Möglichkeit hier etwas über RAW Sockets zu machen. Es wäre nett, wenn ein paar Schnipsel Quelltext dabei wären.
Besten Dank!
Netzwerk da ja/nein in c
Re: Netzwerk da ja/nein in c
In meinem WR Stevens "Programmieren von UNIX-Netzen" ist auf Seite 473 ff. der Source für einen Ping vorhanden; Sourcen zu einem Ping solltest Du eigentlich auch in beliebiger Menge im Netz finden; Debian hat zum Paket iputils-ping beispielsweise den Source vorliegen.
Nachteil Deiner Methode: RAW-Sockets darf unter Linux/UNIX nur root anlegen, also entweder SUID-Bit setzen (Sicherheit!), nur root dranlassen oder eine andere Methode ausdenken.
Jochen
Nachteil Deiner Methode: RAW-Sockets darf unter Linux/UNIX nur root anlegen, also entweder SUID-Bit setzen (Sicherheit!), nur root dranlassen oder eine andere Methode ausdenken.
Jochen
Re: Netzwerk da ja/nein in c
Danke für die Nachricht.
Der Nachteil der RAW Sockets ist mir bekannt. Aber welche andere Methode gibt es denn?
sentor
Der Nachteil der RAW Sockets ist mir bekannt. Aber welche andere Methode gibt es denn?
sentor
Re: Netzwerk da ja/nein in c
Hm, gute Frage. Nur ist die "ping"-Methode auch nicht optimal, da der andere Rechner oder Router auf dem Weg dahin einfach die ICMP-Echo-Requests unter den Tisch fallen lassen kann. Ich denke, es hilt nix anderes als eine normale Verbindung aufzubauen und zu schauen, ob sie innerhalb eines gewissen Zeitrahmens steht. Die Fehlerquellen sind einfach zu vielfältig: Hardware, TCP/IP-Konfiguration, Netzwerk inkl. Router usw. usf.
Jochen
Jochen
Re: Netzwerk da ja/nein in c
Das mit einer einfachen TCP Verbindung habe ich schon ausprobiert. Hier bin ich auf das folgende Problem gestossen, mache ich mit dem Client ein connect und ist das Netzwerk zum Server weg, so dauert dieses connect ziemlich lange und verlangsamt mithin mein gesamtes Programm. Ist der Netzwerkstecker wieder drin, so ist das Problem nicht mehr da. Eventuell kann man beim connect ja noch eine Option setzten, dass es gleich wieder anwortet und bei fehlender Netzwerkverbindung nicht so lange wartet. Wenn dies ginge, so wäre es eine echte Alternative. Ansonsten kann ich sicherstellen, dass der Server den ping nicht zurückweisst, denn er wird von mit selbst konfiguriert.
sentor
sentor
Re: Netzwerk da ja/nein in c
Gesetzt den Fall, dass die Server beide im gleiche LAN stehen, könnte man ja eine max. connect()-Dauer von beispielsweise 5 Sekunden annehmen. Dann würde man mittels alarm() dafür sorgen, dass in ca. 5 Sekunden ein SIGALRM ankommt und den Prozess aus dem connect() herausreisst. Sollte der connect() schneller sein, direkt mittels "(void)alarm(0);" den gesetzten Alarm wieder löschen.
Wäre das eine Idee?
Jochen
Wäre das eine Idee?
Jochen
Re: Netzwerk da ja/nein in c
Ich werde das mit dem Alarm mal ausprobieren.
Betsten Dank für die schnellen und guten Tipps.
sentor
Betsten Dank für die schnellen und guten Tipps.
sentor