getsockname, getpeername

Wie sieht's aus?

#include <sys/types.h>
#include <sys/socket.h>

int getsockname(int s, struct sockaddr *name, socklen_t *namelen);
int getpeername(int s, struct sockaddr *name, socklen_t *namelen);
    

Was tut's?

Die Funktion getsockname() liefert zu einem gegebenen Socket die Adresse des lokalen Endes, während getpeername() die Adresse des entfernten Endes liefert. Wie üblich ist die Rückgabe 0 und im Fehlerfall -1.

Was machen die Parameter?

Der erste Parameter ist der Socket, dessen Adresse man herausbekommen möchte.

Der zweite Parameter ist ein Zeiger auf einen Speicherplatz, an dem das System die Adresse ablegen kann. In unserem Fall eine auf struct sockaddr* gecastete struct sockaddr_in.

Der dritte Parameter teilt dem System mit, wie viel Platz vorhanden ist. Daran erkennt es, welche Art von Adresse man erwartet. Da es sich um einen Wert/Ergebnis-Parameter handelt, muß er vorbelegt werden und unbedingt auf einen schreibbaren Speicherplatz zeigen.

Wie verwende ich es?

struct sockaddr_in addr;
socklent_t len;
...	    /* s = socket ... */
len = sizeof(addr);
getpeername(s, (struct sockaddr*)&addr, &len);