PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Struct unklarheit bei Binding



Baitronic
17-05-2001, 22:33
Hi,

Ich hab mit Netzwerk und Socketprogrammierung angefangen und bin da über was gestolpert, das mir noch unklar ist:

bind(sock, (struct sockaddr *) &svr, sizeof(svr))

Und zwar diese Paramterübergabe der Structur mit dem Sternchenoperator und der Adresse von svr. Wenn das ein pointer ist, auf was zeigt der dann? und was soll die Adresse von svr da noch-es ist ja keine Zuweisung, für mich völlig zusammenhanglos.

Kann mir das einer erklären?

danke,

CU
Baitronic

micha
18-05-2001, 00:16
Moin Baitronic,

Es gibt mehrere Arten von Sockets, unter anderem Unix Domain- und TCP/IP-Sockets. Die Grundform davon ist die Struktur "sockaddr" in "sys/socket.h". Je nachdem, was für einen Socket Du erzeugen willst, musst Du aber die spezielle Struktur für diesen Socket verwenden, bei Unix Domain Sockets wäre das "struct sockaddr_un", bei TCP/IP demenstrpechend "struct sockaddr_in".
Da der Kernel aber eine Struktur vom Typ "struct sockaddr" erwartet, musst Du die vorher erzeugte Struktur "struct sockaddr_un/_in" in den Typ "struct sockaddr" umwandeln oder konvertieren. Genau diesen Zweck erfüllt "(struct sockaddr*)".
Da bind() einen Zeiger auf die Struktur will, übergibst Du ihm die Addresse mit dem Adressoperator &.
Der Pointer zeigt nach wie vor auf eine Struktur vom Typ "sockaddr_un" oder "sockaddr_in", je nachdem was Du zuvor definiert hast.

Ich hoffe, es einigermaßen verständlich rübergebracht zu haben ;)

Gruß micha

Baitronic
18-05-2001, 08:14
Hi,

das heißt ganz simpel das war ein cast??
Da hätt ich auch draufkommen können

Danke

CU
Baitronic

micha
19-05-2001, 00:55
jepp, das richtige Wort wäre Type-Cast statt konvertieren gewesen ;)