[SOCKET] accept(...)
-
int sock; .... for(;;) { struct sockaddr_in client; int c = accept(sock, (struct sockaddr*)&client, sizeof(client)); // <===== printf("Verbindung von %s\n", inet_ntoa(client.sin_addr)); //-------------------------------------------------------------- char buffer[BUFFER_SIZE]; strcpy(buffer,"Willkommen auf meinem Server\r\n"); int g = send(c, buffer, strlen(buffer), 0); if (g == -1) { printf("-> senden fehlgeschlagen"); return -1; } //-------------------------------------------------------------- close(c); }
main.cpp:232: error: invalid conversion from `unsigned int' to socklen_t*'
Zeile 232 entspricht der oben durch einen Doppelpfeil Gekennzeichneten.
Wieso steht die accept-Funktion in dieser Funktion in jedem Tutorial und lässt sich bei mir hingegen nicht kompilieren?
Wäre über jeden Hinweis dankbar.
-
Wieso steht die accept-Funktion in dieser Funktion in jedem Tutorial
Bezweifle ich...
Das letzte Argument soll ein socklen_t* sein und nicht einfach ein size_t.
-
Das Tutorial, auf welches ich mich bezog:
struct sockaddr_in server, client; int sock, fd; int len; ... /* Bearbeite die Verbindungswünsche von Clients * in einer Endlosschleife * Der Aufruf von accept() blockiert solange, * bis ein Client Verbindung aufnimmt */ for (;;) { len = sizeof( client); fd = accept( sock, (struct sockaddr*)&client, &len); if (fd < 0) { perror( "accept failed"); exit(1); } /* Bearbeite den http Request */ serv_request( fd, fd, argv[1]); /* Schließe die Verbindung */ closesocket( fd); }
Quelle: http://cplus.kompf.de/artikel/httpserv.html
Auf meinen Code angewandt:
while(1) { struct sockaddr_in client; int len = sizeof(client); int fd = accept(sock, (struct sockaddr*)&client, &len); if(fd < 0) { printf("error [accept]\n\r"); this->destroy(); return -1; }
Fehlermeldung beim Kompilieren:
main.cpp:235: error: invalid conversion from `int*' to `socklen_t*'
Das einzige, was funktioniert ist, dass ich beide letzten Parameter durch NULL ersetze, was aber nicht im Sinne des Erfinders sein kann.
-
len muss socklen_t sein, nicht int.
-
Stefan__ schrieb:
Wieso steht die accept-Funktion in dieser Funktion in jedem Tutorial und lässt sich bei mir hingegen nicht kompilieren?
Wäre über jeden Hinweis dankbar.
Hinweis: Du versuchst reinen C Code mit einem C++ Compiler zu übersetzten.