Server accept() fail...
-
Hey,
Zuerst: Ich bin neu hier und mir leider nicht ganz sich ob ich hier im richtigen Forum bin, wen ich falsch liege mich bitte benachrichtigen/verschieben... thx
Nun zu Meinem Problem:
mein in c++ codierter kleiner "Server" lässt sich nicht mittels g++ compilern (oder wie das auch heißt?) ...
Als Fehlermeldung bringt g++:
no@no-tower:/media/E8E3-5598$ g++ server.cpp -o server
server.cpp: In function ‘int main(int, char**)’:
server.cpp:46:55: error: invalid conversion from ‘int*’ to ‘socklen_t*’
server.cpp:46:55: error: initializing argument 3 of ‘int accept(int, sockaddr*, socklen_t*)’Und das ist der Code dazu:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <cstring> #include <cstdlib> #define BUFFER_SIZE 1024 int main(int argc, char *argv[]) { int sock, cli_size; struct sockaddr_in my_addr, cli; if (sock = socket(AF_INET, SOCK_STREAM, 0) == -1) { perror("socket() failed"); exit (EXIT_FAILURE); } my_addr.sin_family = AF_INET; my_addr.sin_port = htons(222); my_addr.sin_addr.s_addr = INADDR_ANY; if (bind(sock, (struct sockaddr*)&my_addr, sizeof(my_addr)) == -1) { perror("bind() failed"); exit (EXIT_FAILURE); } if (listen(sock, 3) == -1) { perror("listen() failed"); exit (EXIT_FAILURE); } for(;;) { cli_size = sizeof(cli); if (accept(sock, (struct sockaddr *) &cli, &cli_size) == -1) // line 46 { perror("accept() failed"); exit (EXIT_FAILURE); } printf("client from %s", inet_ntoa(cli.sin_addr)); } return 0; }
Wenn jemand eine Idee hat, was das ein könnte bitte melden,
danke im vor raus,
ein ziemliches newblood...
-
cli_size ist ein int - und &cli_size demnach ein int*.
accept(..) erwartet aber als 3. Argument ein socklen_t* - d.h. cli_size muss als socklen_t definiert werden.
-
cool, danke, jetzt lässt sichs compillern! ;)ABER wenn ich das programm jetzt mit diesem code:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <cstring> #include <cstdlib> #define BUFFER_SIZE 1024 int main(int argc, char *argv[]) { int sock, cli_size; struct sockaddr_in my_addr, cli; if (sock = socket(AF_INET, SOCK_STREAM, 0) == -1) { perror("socket() failed"); exit (EXIT_FAILURE); } my_addr.sin_family = AF_INET; my_addr.sin_port = htons(222); my_addr.sin_addr.s_addr = INADDR_ANY; if (bind(sock, (struct sockaddr*)&my_addr, sizeof(my_addr)) == -1) { perror("bind() failed"); exit (EXIT_FAILURE); } if (listen(sock, 3) == -1) { perror("listen() failed"); exit (EXIT_FAILURE); } for(;;) { socklen_t cli_size; cli_size = sizeof(cli); if (accept(sock, (struct sockaddr *) &cli, &cli_size) == -1) { perror("accept() failed"); exit (EXIT_FAILURE); } printf("client from %s", inet_ntoa(cli.sin_addr)); } return 0; }
ausführe gibt es nur zurück "bind() failed: Socket operation on non-socket" und schließt sich dann sofort...
nochmal danke & danke im vorraus
newblood
-
keiner mehr ne idee?
-
Schreibe mal folgenden Code um:
// von if (sock = socket(AF_INET, SOCK_STREAM, 0) == -1) { // ... } // nach sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { // ... }
-
cool, danke, jetzt geht's ...