Prvo, hvala na tako brzom odgovoru, pokusao sam da sto vise priblizim problem (valjda sam se zbog toga i tako raspisao), ali ovako:
evo malo koda
Code:
with AThread.Connection do
begin
s := ReadLn;
IP := Socket.Binding.PeerIP;
Port := IntToStr(Socket.Binding.PeerPort);
// nesto se radi u zavisnosti od toga sta je stiglo
Writeln (Odgovor);
end;
Slazem se sa tvojom konstatacijom da je najbolje pusti thread-ove da sami "umru", ali problem je , kao sto napisah, u tome da se komunikacija
izmedju klijenta i servera odvija kroz vise thread-ova u okviru jednog socket-a. I sve je uredu kada se ispostuje cela komunikacija (odnosno kada
stigne FIN_FLAG od klijenta), medjutim kada nastane zastoj ili u komunikaciji, socket ostaje otvoren, i jedi nacin je da sam serverski program
preuzme na sebe da ih gasi. Donekle sam resio problem kada sam napisao jednu proceduru kojom gasim prvih 15 clanova ThreadList-e (nije bas
najsrecnije resenje), kada ih bude ukupno 30 (u statusu ESTABLISHED), ali resenje nije dobro jer ne uspevam da ih se oslobodim (neki od njih "zive"
i po vise sati, jer se procedura okida kada ih u ThreadList-i bude vise od 30).
Evo koda:
Code:
procedure CloseSocket;
var
List : Tlist;
i : integer;
begin
try
List := TCP4889.Threads.LockList;
if List.Count > 29 then
begin
for i := 0 to 14 do
try
TIdPeerThread(List.Items[i]).Connection.Socket.Close;
except
on e: exception do System.WriteLn(e.Message);
end;
for i := 0 to 14 do
TCP4889.Threads.Remove(List.Items[0]);
finally
TCP4889.Threads.UnlockList;
end;
end;
Iako ih ova procedura zatvara i brise iz liste oni ipak ostaju da zive na sistemu. Pretpostavljam da bi resenje bilo slucaj kada bih mogao
da izmerim duzinu "zivota" socketa, i ukoliko je on, na primer, duzi od 3 minuta da ga automatski zatvaram sa strane servera.
poZ
ps sad sam video poruku od Savkica, radim u Delphi7 ali koristim CrossKylix compiler za generisanje Linux programa.
EDIT (savkic): dodao sam code tagove tako da poruka bude lakša za praćenje.
[Ovu poruku je menjao savkic dana 15.12.2008. u 15:51 GMT+1]
[Ovu poruku je menjao savkic dana 15.12.2008. u 15:51 GMT+1]