• Viernes 8 de Noviembre de 2024, 21:40

Autor Tema:  EAGAIN en recv() en reconexion  (Leído 848 veces)

cgillopez

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
EAGAIN en recv() en reconexion
« en: Lunes 24 de Enero de 2011, 02:26 »
0
Hola,

he implementado un cliente socket que se conecta a una webcam y recupera el video sobre un tunel HTTP/GET que se crea al inicio de la conexión y luego por RTSP+HTTP se envían y reciben las respuestas y el video. El programa funciona bien, cuando la camra se desconecta se cierra el socket, se finalizan los hilos y se vuelve al main, donde se reinicia todo.

El tunel HTTP/GET se vuelve a crear correctamente el recv recoge un "HTTP GET" pero cuando se lanza el primer comando de RTSP DESCRIBE, el recv() solo recupera el error EAGAIN. He comprobado con wireshark que la webcam envia lun RTSP OK, pero que el recv por algun motivo no es capaz de leer.
Código: C++
  1.    //LISTENING...
  2.           int theLen=1500; //3000;
  3.           int ret=0;
  4.           unsigned char receivedData[3000];
  5.  
  6.  
  7.           while (c->bFin==false){
  8.  
  9.             //  ret = read(c->fd_get, receivedData, theLen);
  10.  
  11.               //ret= recvfrom(c->fd_get, receivedData, theLen, 0,  (struct sockaddr *) 0, (socklen_t*)0);
  12.               ret=recv(c->fd_get, receivedData, theLen, 0);
  13.               if (ret == 0)
  14.               {
  15.                   cout << "Server closed connection: 0" << endl;
  16.  
  17.                 }
  18.                   else
  19.                   if (ret == -1){
  20.                     fprintf (stderr, "n[%d]: %s %dn", __LINE__, strerror (errno), errno);
  21.  
  22.     cout << "errno" << endl;
  23.  
  24.                             if (errno==EINTR )
  25.                                 cout << "EINTR" << endl;
  26.                             if (errno==EAGAIN  )
  27.                                 cout << "EAGAIN " << endl;
  28.  
  29.  

Puede ser por el timeout? o un problema de que no se ha borrado de la pila los datos? alguna idea?

Muchas gracias! Un saludo!!