[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.


Log in to reply