Compiler Fehler
-
Hallo, ich habe mal dieses Programm geschrieben:
#include <iostream.h> #include <stdio.h> #include <errno.h> #include <string> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> int main() { int s; struct sockaddr_in addr; s=socket(AF_INET, SOCK_STREAM, 0); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_port = htons(80); addr.sin_family = AF_INET; if (bind(s, &addr, sizeof(addr)) == -1) { perror("bind() failed"); return 2; } if (listen(s, 3) == -1) { perror("listen () failed"); return 3; } int close(int s); }
und dann brachte mein Compiler (g++) diese Meldung:
server.cpp: In function ‘int main()’:
server.cpp:22: error: cannot convert ‘sockaddr_in*’ to ‘const sockaddr*’ for argument ‘2’ to ‘int bind(int, const sockaddr*, socklen_t)’Doch leider weiß ich nicht was das bedeuten soll und was nun mein Fehler ist. Könnt ihr mir da weiterhelfen?
Vielen Dank schonmal für eure Antworten.
-
Da steht doch genau, wo der Fehler liegt. Du hast ein
sockaddr_in
-Objekt und übergibst das einer Funktion, die einsockaddr
erwartert.(zur Fehlerbehebung mußt du jemanden fragen, der sich besser mit der Socket-Programmierung auskennt)
-
Ist in diesem Fall (fast zu) einfach: Du musst den Zeiger nach (const sockaddr*) casten. Anhand der Family (die in allen sockaddr_* Strukturen an derselben Stelle steht), erkennt die Funktion bind dann, dass Du in Wirklichkeit ein sockaddr_in* übergeben hast.
-
Vielen Dank. Kannst du denn den Code so hinschreiben wie er richtig aussehen muss?
Wäre mir eine große Hilfe.
-
Was ist denn an diesem Satz zu schwer umzusetzen?
LordJaxom schrieb:
Ist in diesem Fall (fast zu) einfach: Du musst den Zeiger nach (const sockaddr*) casten.
"Casten" bedeutet einfach eine explizit angegebene Typumwandlung:
bind(s, (sockaddr*)&addr, sizeof(addr)) //oder bind(s,static_cast<sockaddr*>(&addr),sizeof(addr))
-
Bin halt bisschen noch ein C++ noob. Trotzdem Danke.