socket - schleifen problem



  • Der unten stehende Code, soll eine Verbindung bzw. ein GET Request vom Browser abholen, weiterverarbeiten, eine Verbindung zum Server herstellen und es dort hinschicken, dann den HTML Code empfangen und diesen dann zum Browser weiterleiten. Problem ich empfange entweder gar nichts, dann mal nur Speicher Muell. Denke das Problem liegt bei der Positionierung der Schleifen aber wo genau?

    while(1)
    {
    	bSock = accept(pSock, (struct sockaddr*)&client, &client_size));
    	tSock = SetupTargetServer("xyz.com");
    
    	while(1)
    	{
    		recv(bSock, recvBuf, strlen(recvBuf) - 1, 0);
    		recvBuf[strlen(recvBuf)] = '\0';
    
    		ParseHttpHeader(recvBuf, nrqRef, sendBuf);
    
    		send(tSock, sendBuf, strlen(sendBuf), 0);
    
    		recv(tSock, htmlBuf, strlen(htmlBuf) - 1, 0);
    		htmlBuf[strlen(htmlBuf)] = '\0';
    
    		send(bSock, htmlBuf, strlen(htmlBuf), 0);
    	}
    }
    

    Vielen Dank im voraus!



  • recv(bSock, recvBuf, strlen(recvBuf) - 1, 0);
            recvBuf[strlen(recvBuf)] = '\0';
    

    strlen zählt alle Zeichen in einem String, bis ein 0 kommt. Du willst aber strlen auf einen Buffer anwenden, der nicht mit einer 0 terminiert ist um diesen mit 0 zu terminieren, dass kann doch nicht gut gehen. recv liefert dir aber die Anzahl der gelesenen Zeichen zurück.



  • kingruedi, habe das so verbessert:

    recvBytes = recv(tSock, htmlBuf, strlen(htmlBuf) - 1, 0);
    htmlBuf[recvBytes + 1] = '\0';
    

    aber das Problem besteht weiterhin, er empfaengt nichts. Ist denn der ablauf mit den schleifen ok?

    strace output:

    send(5, "GET /index.html HTTP/1.1\r\nHost: "..., 399, 0) = 399
    recv(5, "", 4294967295, 0) = 0
    send(4, "", 0, 0) = 0
    recv(4, "", 435, 0) = 0


Anmelden zum Antworten