elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Recv() porque tarda infinito? ...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Recv() porque tarda infinito? ...  (Leído 2,732 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
¿Recv() porque tarda infinito? ...
« en: 29 Septiembre 2015, 11:18 am »

Código
  1. string respuesta;
  2. char *bloque = new char[3000]();
  3. while (int res = recv(victima, bloque, 3000, 0) > 0)
  4. respuesta += string(bloque);

... mientras que esto es instantáneo? : recv(victima, bloque, 3000, 0);

¿No hay algún timeout para que salga?, o ¿no se puede hacer algo?.

Saludos.


En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Orubatosu


Desconectado Desconectado

Mensajes: 2.515


Ver Perfil WWW
Re: ¿Recv() porque tarda infinito? ...
« Respuesta #1 en: 29 Septiembre 2015, 11:37 am »

Si eso es una función... ¿donde está el return?


En línea

"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: ¿Recv() porque tarda infinito? ...
« Respuesta #2 en: 29 Septiembre 2015, 12:27 pm »

Si eso es una función... ¿donde está el return?

Si te refieres al código en su conjunto es una parte de una función, y hay funciones que no devuelven nada, void.

Si te refieres al recv(), su valor de retorno queda almacenado en la variable res, que ahora que lo dices se me ha olvidado quitarla, pues ya no la uso, hago comprobación de tamaño de la respuesta obtenida, en vez de igualar a SOCKET_ERROR (-1), así hago una mejor comprobación de errores y si no obtiene respuesta cuenta como error.

Aparte que esto no tiene que ver con el tema en cuestión, seguiré buscando hacerla de un timeout para recv(), seguro se puede.

Saludos.

Tacata && solvented:

Código
  1. string respuesta;
  2. char *bloque = new char[3000]();
  3. timeval tiempo_espera;
  4. tiempo_espera.tv_sec = 1;
  5. setsockopt(victima, SOL_SOCKET, SO_RCVTIMEO, (char*)&tiempo_espera, sizeof(timeval));
  6. while (recv(victima, bloque, 3000, 0) > 0)
  7. respuesta += string(bloque);

Saludos ft kxd
« Última modificación: 29 Septiembre 2015, 12:53 pm por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: ¿Recv() porque tarda infinito? ...
« Respuesta #3 en: 29 Septiembre 2015, 13:01 pm »

Son sockets bloqueantes y estas en un bucle, cuando no haya mas que leer esperara a recibir algo desde el otro extremo.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: ¿Recv() porque tarda infinito? ...
« Respuesta #4 en: 29 Septiembre 2015, 13:14 pm »

Son sockets bloqueantes y estas en un bucle, cuando no haya mas que leer esperara a recibir algo desde el otro extremo.

Pero sale del bucle cuando hay error (-1) o cuando ya no recibe más datos, debido a la condición, y para que no se quede esperando respuesta, cuando el timeout salta sale del bucle si no ha recibido respuesta. Luego espera al otro extremo, hasta que el timeout salta, entonces deja de esperarlo y sale.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: ¿Recv() porque tarda infinito? ...
« Respuesta #5 en: 29 Septiembre 2015, 13:29 pm »

Si te referis al ultimo codigo es asi, yo me referia a la pregunta original donde SO_RCVTIMEO es 0 por defecto y por lo tanto espera para siempre hasta recibir respuesta del otro extremo (o que se cierre el socket pero en fin la diferencia entre esa llamada solitaria y el bucle es eso, al continuar llamando a recv se queda sin bytes por leer y espera a que le manden algo).
« Última modificación: 29 Septiembre 2015, 13:32 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: ¿Recv() porque tarda infinito? ...
« Respuesta #6 en: 29 Septiembre 2015, 14:46 pm »

Si es correcto.

Ya solo sería configurar el timeout  de descarga recv() y subida send() para cada red.
 
Saludos.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
'¿Apagas el ordenador después de utilizarlo? No, porque tarda mucho'
Noticias
wolfbcn 7 4,201 Último mensaje 27 Septiembre 2010, 19:58 pm
por Ariath
hook a recv sin ms detours?
Programación C/C++
while 2 3,345 Último mensaje 6 Octubre 2010, 23:25 pm
por while
recv() socket error?
Programación C/C++
Riki_89D 6 3,949 Último mensaje 14 Octubre 2011, 21:09 pm
por Riki_89D
Porque cuando utilizo reaver para wpa en backtrack 5 tarda demasiado.
GNU/Linux
DuXGreck 6 7,651 Último mensaje 29 Abril 2013, 21:30 pm
por robriap
porque no funciona send() y recv()?
Programación C/C++
Belial & Grimoire 1 1,992 Último mensaje 21 Julio 2013, 04:12 am
por Belial & Grimoire
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines