Problem beim empfangen von http client anfrage



  • ich habe hier folgendes Problem, es handelt sich um einen Server wenn ich den aber starte und mit firefox auf den server gehe sagt er mir das die verbindung unterbrochen wurde. ich habe das soweit aufklären können das es daran liegt das er nicht alles von der Anfrage entgegen nimmt.

    hat jemand ne idee worans liegen könnte oder wie man das am besten rausfinden kann?

    daher nachfolgenden code:

    ////////////////////////////////////////////////////////////////////////////////////////
    void CSerwebView::ProcessRead(int SockNumber)
    
    {
     int err, RdLoop;
     u_long ulBytesToRead = 0L;
     char Buf[200];
    
       if (WWWConv[SockNumber].State != WAITING)
         {    
           #ifdef _DEBUG
              PrintSt("  *** The socket is trying to send information while we are in send mode. \n");
           #endif
           return;
          }       
       #ifdef _DEBUG   
          PrintSt("  *** I am able read from the client now \n");
       #endif
    
       ioctlsocket( WWWConv[SockNumber].CliSock, FIONREAD, &ulBytesToRead);
    
       while ((ulBytesToRead > 0L) && (WWWConv[SockNumber].State == WAITING))
          {
             // Just in case a nut desides to crash the thing ....
             if (ulBytesToRead > 199)
               ulBytesToRead = 200;                               
    
             err = recv( WWWConv[SockNumber].CliSock, Buf, (int) ulBytesToRead, 0);
    
             if (err == SOCKET_ERROR)
                    {
                       PrintSt("  An error ocurred when reading from the client \n");
                       return;
                    }        
    
                  RdLoop = 0;
                  while (RdLoop < err)
                    if ((Buf[RdLoop] == '\n') ||(Buf[RdLoop] == '\r') ||(Buf[RdLoop] == 0x0D) || (Buf[RdLoop] == 0x0A))
                      {                                
                        WWWConv[SockNumber].State = SENDING;
                        break;
                      }
                    else            
                      {
                         WWWConv[SockNumber].InBuf += Buf[RdLoop]; 
                         RdLoop++;
                      }
    
                  ioctlsocket( WWWConv[SockNumber].CliSock, FIONREAD, &ulBytesToRead);
                }
    
            // If we received the request, lets address it .....
    
               #ifdef _DEBUG
                  PrintSt("  *** Got the following so far ->");
                  PrintSt(WWWConv[SockNumber].InBuf);
                  PrintSt("<---\n");
               #endif
    
               if (WWWConv[SockNumber].State == SENDING)
                  {
                    ProcessRequest(SockNumber);
    
                  } 
    
    }
    


  • habe jetzt

    char Buf[200]; erhöht auf 1024

    und

    if (ulBytesToRead > 199)
    ulBytesToRead = 200;

    angepasst

    if (ulBytesToRead > 1023)
    ulBytesToRead = 1024;

    die fehlermeldung ist nun weg aber ganz richtig scheint das wohl auch noch nicht zu sein


Anmelden zum Antworten