Netzwerk da ja/nein in c

Post Reply
Message
Author
sentor

Netzwerk da ja/nein in c

#1 Post by sentor »

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!

Jochen

Re: Netzwerk da ja/nein in c

#2 Post by Jochen »

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

sentor

Re: Netzwerk da ja/nein in c

#3 Post by sentor »

Danke für die Nachricht.

Der Nachteil der RAW Sockets ist mir bekannt. Aber welche andere Methode gibt es denn?

sentor

Jochen

Re: Netzwerk da ja/nein in c

#4 Post by Jochen »

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

sentor

Re: Netzwerk da ja/nein in c

#5 Post by sentor »

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

Jochen

Re: Netzwerk da ja/nein in c

#6 Post by Jochen »

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

sentor

Re: Netzwerk da ja/nein in c

#7 Post by sentor »

Ich werde das mit dem Alarm mal ausprobieren.

Betsten Dank für die schnellen und guten Tipps.

sentor

Post Reply