inet_addr, inet_aton, inet_ntoa

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.