Hi, On Fri, 7 Feb 2003, Holger Macht wrote:
bei meinem Client steht folgendes: if (connect(my_socket, (sockaddr *) &serveradresse, sizeof(sockaddr)==-1)) { perror ("connect()"); return -1; } Dann bekomme ich folgende Fehlermeldung: connect(): Invalid argument
Also, dass du perror benutzt ist jetzt gut, da du dann einen Hinweis erhaelst auf:
Blos was ist das "invalid argument"?
Nun, eigentlich schrieb David schon alles noetige, aber nochmal: Zuerst die Signatur von connect(): int connect (int sockfd, const struct sockaddr *dest, socklen_t len); Da Ding erwartet also drei Argument, und das dritte sollte ein "socklen_t" sein (es gibt die Laenge der Addresse an). Und connect gibt einen int zurueck. Nun wie du die Funktion benutzt: if (connect (f, (sockaddr*) &dest, sizeof (dest) == -1 ) ) Siehst du's? Dein drittes Arguement an connect() ist "sizeof(dest)==-1", mithin wird es 0 sein, wenn ausgewertet, da die Groesse von "dest" nun mal nicht -1 ist. Fuer connect() uebergibst du also als Addresslaenge 0, was keiner gueltigen Addresse entsprechen kann, mithin eine ungueltige ist, was eben zu "invalid argument" fuehrt. Du wolltest natuerlich den Rueckgabewert von connect() auf -1 testen, aber dazu hast du die falsche Klammerung. Richtig waere: if (connect (f, (struct sockaddr*) &dest, sizeof (dest)) == -1) Lies es dir solang durch, bis du den Unterschied bemerkst. Er ist wirklich da ;-) Nochwas: der Typ der Addresse ist "struct sockaddr*", nicht "sockaddr *". In C++ ist das kein Unterschied, aber in C doch. Wenn du also castest, dann wie in meinem Beispiel.
Also der Server denke ich funktioniert, da die Ausgabe von socklist folgendes liefert:
Jau, sieht gut aus. Ciao, Michael.