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.
//LISTENING...
int theLen=1500; //3000;
int ret=0;
unsigned char receivedData[3000];
while (c->bFin==false){
// ret = read(c->fd_get, receivedData, theLen);
//ret= recvfrom(c->fd_get, receivedData, theLen, 0, (struct sockaddr *) 0, (socklen_t*)0);
ret=recv(c->fd_get, receivedData, theLen, 0);
if (ret == 0)
{
cout << "Server closed connection: 0" << endl;
}
else
if (ret == -1){
fprintf (stderr, "n[%d]: %s %dn", __LINE__, strerror (errno), errno);
cout << "errno" << endl;
if (errno==EINTR )
cout << "EINTR" << endl;
if (errno==EAGAIN )
cout << "EAGAIN " << endl;
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!!