| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
a3093 Lt


Registrado: 27 May 2004Mensajes: 97Ubicación: Las Palmas de Gran Canaria
|
Publicado: Sab 31 Jul, 2004 7:58 pm Asunto: Buffer del Socket lleno |
|
|
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 |
|
 |
a3093 logout Invitado
|
Publicado: Sab 31 Jul, 2004 9:31 pm Asunto: |
|
|
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 |
|
 |
a3093 offline Invitado
|
Publicado: Dom 01 Ago, 2004 10:50 am Asunto: |
|
|
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 |
|
 |
a3093 Lt


Registrado: 27 May 2004Mensajes: 97Ubicación: Las Palmas de Gran Canaria
|
Publicado: Dom 01 Ago, 2004 10:47 pm Asunto: |
|
|
Me temo que no se ha solucionado
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
Pondre una pregunta por el estilo en otro hilo pero de forma más concreta. |
|
| Volver arriba |
|
 |
|