Wie sieht's aus?
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int inet_aton(const char *cp, struct in_addr *pin);
in_addr_t inet_addr(const char *cp);
char *inet_ntoa(struct in_addr in);
Was tut's?
Mit inet_addr() wandelt man eine IP-Adresse als Zeichenkette in Punktenotation (also z.B. 127.0.0.1) in einen Binärwert um, den man beispielsweise als Wert für das Feld s_addr einer struct in_addr{} einsetzen kann. Das Gleiche tut die Funktion inet_aton(), mit der Ausnahme, daß hier überprüft werden kann, ob es geklappt hat. Da inet_addr() im Fehlerfall -1 liefert, das aber gleichzeitig die Repräsenatation von 255.255.255.255 ist, kann man hier nicht erkennen, ob der Benutzer Quatsch übergeben hat, bei inet_aton allerdings schon. Achtung: der Rückgabewert ist 1 wenn es geklappt hat, 0 wenn es nicht geklappt hat.
inet_ntoa() stellt den Umkehrweg dar, diese Funktion macht aus einem Binärwert eine Zeichenkette in Punktenotation.
Bemerkung
Die Funktion inet_aton() gibt es nur unter UNIX, bei Windows muß man auf
inet_addr() ausweichen.
Was machen die Parameter?
Bei inet_aton() sind die Parameter ein Zeiger auf die Zeichenkette, die umgewandelt werden soll, und ein Zeiger auf eine (beschreibbare) Struktur, die das Ergebnis auffängt.
Bei inet_addr() ist der Parameter ebenfalls die umzuwandelnde Zeichenkette, das Ergebnis wird jedoch als Rückgabewert geliefert.
inet_ntoa() schliesslich erhält als Parameter einen Zeiger auf eine Struktur, die die umzuwandelnde Adresse beinhaltet, und gibt einen Zeiger auf eine Zeichenkette zurück. Diese muß vor dem nächsten Aufruf von inet_ntoa() kopiert werden, da sie in einem lokalen Speicher untergebracht wird, der bei sukzessiven Aufrufen wiederverwendet wird.