Am Mittwoch, 7. März 2007 09:43 schrieb Kai-Micael Preiß:
Hallo Liste!
Ich habe folgendes Code-Beispiel (Buch: C und Linux) für einen einfachen "Universal-Client" (Arbeitsweise ähnlich Terminal-Programm) für C unter Linux gefunden:
Ich empfehle, wenn es denn schon in C sein muss, einfach libggz-dev zu installieren und über #include <ggz.h> fd = ggz_make_socket(GGZ_SOCK_CLIENT, 22, "localhost"); die Sache mächtig zu vereinfachen und auch gleich noch Unterstützung für IPv6, SSL/TLS und dergleichen drin zu haben und sich nicht um Kompatibilität mit BSD oder alternativen Washington'schen Systemen beschäftigen zu müssen.
Wer auch immer den Beispielquelltext erstellt hat, hat nicht unbedingt Kompetenz bewiesen. Das sizeof() führt man auf den Variablennamen aus, nicht auf den Datentyp, denn dieser kann sich evtl. mal ändern (z.B. 32->64 bit) und dann hat man zwei Stellen anstatt nur einer, an der man das ändern muss und eventuell vergisst.
Der Typfehler kann über ein Casting behoben werden. Also (struct sockaddr*)server_addr verwenden. Aber wie gesagt, ich würde mir nicht all die Probleme einhandeln wollen, die man bekommt, wenn man Netzwerkcode auf der Ebene selbst in die Hand nimmt.
Josef