lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] Recv en socket TCP


From: Oscar F
Subject: [lwip-users] Recv en socket TCP
Date: Wed, 30 Sep 2009 12:48:34 +0200

Hello again, the problem continous, in this moment i have achived accept the connection, then i have inserted in a select struct the three request socket .

When the customer send me a request i awake in select, but i can read anything, the program block in recv. The size of this reception is variable, in my first connection i ´must receive 10 bytes.

The code:

 FD_ZERO(&readset);
      maxfd=0;
      for(i=1;i<4;i++)
       {
        FD_SET(aSocket[i], &readset);
        if (aSocket[i]> maxfd)
         maxfd = aSocket[i];
       }

      print_dbg(" Metemos los 3 Sockets por donde podemos recibir para entrar en el select \n");

      while(1){
          // Check for received packets on configured sockets (blocking )
          ret = select(maxfd+1, &readset, NULL, NULL, NULL);

          if (ret > 0) //No error
            {
              //Check data for socket 1
              if (FD_ISSET(aSocket[1], &readset))
                ProcessRequestPC_to_RTU(aSocket[1]);

              //Check data for socket 2
              if (FD_ISSET(aSocket[2], &readset))
               ProcessRequestPC_to_PCU(aSocket[2]);

              //Check data for socket 3
              if (FD_ISSET(aSocket[3], &readset))
               ProcessRequestPC_Finish(aSocket[3]);
            }
          }
          }


and one fucntion:

void static ProcessRequestPC_to_RTU (int s)
{
 int result,nbytesRx;
 long code_command,length_command;

  nbytesRx=0; //Total=0;
  print_dbg(" Recibida peticion RTU por socket: ");
  print_dbg_ulong(s);
  print_dbg(" \n");

 

  result = recv(s, BufferRx,sizeof(BufferRx), 0);    //Block the program and i saw with wireshark that the message is full with 10 bytes

  if (result<=0) //Error or close connection
   {
    CloseConnectionPC(aSocket,lSocket );
    return;
   }
  nbytesRx+=result; //Byte received

  //Calculate the Length. ¡¡¡¡¡ I supposed that 4 byte are received always TAKE CARE!!!!!!!
  memcpy(&length_command, BufferRx, LENGHT_RX);
  if (length_command!=nbytesRx)
  {
   do{
       result = recv(s, BufferRx+nbytesRx, length_command-nbytesRx, 0);
       if (result<=0) //Error or close connection
          {
           CloseConnectionPC(aSocket,lSocket );
           return;
          }
       nbytesRx+=result;

     } while (nbytesRx<length_command);
  }
  //All message is received
  memcpy(&code_command, BufferRx+LENGHT_RX,L_CODE_RX); //copy the code of message

  switch(code_command)
  {
    ......

More thing, the size of buffer is 2048m but i want to use a buffer of 12000 bytes. If i write this size of buffer crack the application, and don´t create this task

Thanks
Oscar

reply via email to

[Prev in Thread] Current Thread [Next in Thread]