Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Buffer del Socket lleno

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Buffer del Socket lleno Responder citando

Estoy recorriendo un rango de IP con un timer hasta que encuentro un puerto en una IP que esté escuchando. Resulta que si al timer le pongo una frecuencia demasiada rápida me sale una Excepción al poco tiempo diciéndome que "El buffer se ha llenado". Además, en el panel de tareas se ve que la aplicación va aumentando de tamaño en memoria.

¿Alguien sabe por qué ocurre esto? ¿Hay alguna forma de vaciar el buffer del socket?

Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

investigando un poco, la aplicación va aumentando de memoria cuando pasa lo siguiente:


void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(!ClientSocket->Active)
{ Form1->ClientSocket->Host = ip;
Form1->ClientSocket->Port=7777;
Form1->ClientSocket->Active=true;
}
}


Si comento la linea Form1->ClientSocket->Active=true;
La aplicación no aumenta de memoria, pero si la descomento pues sí.

¿Alguien me puede decir el por qué o darme una solución alternativa?

Gracias
Volver arriba
Mensaje    Asunto: Responder citando

Ya lo solucioné, espero que lo que explique a continuación sirva de ayuda para alguien.

Resulta que si al conectar el socket client, no encuentra el servidor o hay algún otro tipo de error, el evento OnError no se ejecuta inmediatamente, sino tarda unos seg en saltar. Entonces, al ejecutar yo más rápido que el client se conectara que lo que tarda en saltar el evento OnError, todos esos intentos fallidos iban acumulándose en memoria, y así continuaba hasta que había un desbordamiento.

La solución es que se llame una única vez a ClientSocket->Open() y si da error, volverlo a llamar desde el evento OnError. Así nos aseguramos que haya comprobado si ha habido un error antes de intentar otra conexíón.
Volver arriba
Mensaje    Asunto: Responder citando

Me temo que no se ha solucionado Sad

Lo que pasa ahora es que va aumentando pero de forma más lenta.

El proceso a las 11:30 cuando fue arrancado ocupaba 2.804 Kb. Dicho proceso está continuamente testeando a que se conecte un server.

A las 21:44 dicho proceso tenía un tamaño de 3.764 Kb, es decir, en 10 horas aumentó casi 1Mb su tamaño original en memoria. ¿Alguien sabe por qué? A mi ya se me acabaron las ideas Sad

Pondre una pregunta por el estilo en otro hilo pero de forma más concreta.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.