Newsgroup: it.comp.lang.delphi
Titolo: Indy9 - Close Gracefully

Non riesco ad evitare la visualizzazione del messaggio *Connection Closed 
Gracefully* quando disconnetto il client lato server (sia nell'Ide sia con 
gli eseguibili).
Mi sono letto l'articolo 
http://www.swissdelphicenter.ch/en/showarticle.php?id=1
 ma non mi è stato 
d'aiuto.
Da Google si suggerisce di mettere nell'evento OnDisconnected del client:
procedure TForm1.IdTCPClientDisconnected(Sender: TObject);
begin
  try
    {in realtà non devo processare alcun evento }
  except On EIdConnClosedGracefully do
  begin
    { nothing }
  end;
  end;
end;
Ho l'esigenza di disconnettere i client ad un certo punto delle operazioni, 
e questo non rappresenterebbe un errore per me, senza l'apparizione del 
messaggio in questione.
Sapete come fare?
Valter

 messaggio in questione.
Non ho capito qual è il tuo problema.  Se disconnetti il client, il server
riceve quell'eccezione, la gestisce, la logga e procede, dov'è il problema?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 problema?
Nessun problema se disconnetto il client dal client stesso, nè se il client 
solleva qualche eccezione sia in connessione che disconnessione...tutti i 
controlli funzionano a dovere
Il problema è quando disconnetto il client dal server, insomma quando lo 
"butto fuori".
A quanto pare chiudergli la connessione da remoto (lato server) solleva sul 
client il Connection Closed Gracefully e questo msg non riesco ad 
intrappolarlo sul client e mi spunta fuori
Domanda:
Se ho sul client un evento del genere:
procedure TForm1.IdTCPClientDisconnected(Sender: TObject);
begin
  try
    {niente, la struttura del prg non prevede nulla }
  except On EIdConnClosedGracefully do
  begin
    { nothing }
  end;
  end;
end;
la sezione Except non dovrebbe catturare la finestra del Connection Closed 
Gracefully? Oppure tale msg viene processato prima del OnDisconnected (anche 
se mi sembra strano)?

 sul  client il Connection Closed Gracefully
"A quanto pare" ?!... ma l'hai letto l'articolo al link che hai postato ?



Mi riferivo proprio a quello...l'ho riletto, ma resto come prima...
If the other side has closed the connection and the socket is read or 
written to, EIdConnClosedGracefully will be raised by Indy.
Nel mio caso è il server a chiudere la connessione
When EIdConnClosedGracefully is raised in a client, it is an error and you 
should trap and handle this exception.
Che è quello che dovrei fare
With Single Disconnect, one side just disconnects. The other side is left to 
detect this and then take appropriate action to terminate the session. With 
protocols that use this disconnection method you will see 
EIdConnClosedGracefully and it is normal. It is an exception, but Indy knows 
about it and will handle it for you.
E qui sostiene che la gestisce Indy
Il Mutual Agreement non solleverebbe l'eccezione, a meno che non si tratti 
di un errore ed in questo caso dovrebbe/potrebbe essere loggato.
Ma il client non sa quando verrà disconnesso.
The EIdConnClosedGracefully is raised from a core routine, however when this 
routine is called it is normally several method calls deep. The 
EIdConnClosedGracefully is in fact an exception and needs to be trapped by 
the topmost caller in most cases. The proper way to handle this is an 
exception.
If you wish to handle this exception yourself you may, otherwise Indy will 
handle it and take the appropriate actions for you automatically.
In sostanza si sostiene possibile catturare l'errore ma sicuramente sbaglio 
l'approccio.

 "A quanto pare" ?!... ma l'hai letto l'articolo al link che hai postato ?
Ok, il problema era che il client tentava di leggere dal socket dopo la
disconnessione imposta dal server.
Io mi intestardivo sull'evento OnDisconnected ma l'errore si sollevava
direttamente sui Read e Write vari.
* If the other side has closed the connection and the socket is read or
written to, EIdConnClosedGracefully will be raised by Indy *
Grazie e ciao
Valter