procedure handle_fd_close_notification(p_socket: integer);
var l_status,ArrayOffset: Integer;
l_linger: TLinger;
tmpmsg:string;
l_absolute_linger: array[0..3] of char absolute l_linger;
username:string;
l_index_of_server_client_socket: Integer;
cando:boolean;
somme1:int64;
begin
username:='';
tmpmsg:='';
arrayoffset:=-1;
ArrayOffset := dcusers.getindex(p_Socket); // recherche de l'index de l'utilisateur
somme1:=0;
cando:=false;
if p_socket= g_server_socket_handle
then begin
end else begin
if arrayoffset<>-1 then begin
Username := PConnectedUser(dcUsers.Items[ArrayOffset])^.Username;
cando:=PConnectedUser(dcUsers.Items[ArrayOffset])^.ValidateDenide; // test voir si l'utilisateur est bien enregistre sur le serveur
if cando=true then begin
somme1:=PConnectedUser(dcUsers.Items[ArrayOffset])^.Sharedbytes;
//if (somme1)=true then begin
if somme1>0 then begin
somme:=somme-somme1;
updateshare(somme);
end;
tmpmsg:='$Quit ' + Username;
leavelistitem.Add(tmpmsg); // ajout dans le buffer de sortie
mainleavelist.Add(leavelistitem);
deluser(username); //effacement du nom de l'utilisateur dans la listview
end;
form1.logmessage(frame11.memo1,lmtinformation,ldnone,'[HUB] LOG : Closing('+ f_name_and_handle(p_socket)+' '+username+ ' share : '+inttostr(somme1)+ ')');
dcusers.delete(ArrayOffset); // effacement de l'utilisateur dans la liste des utilisateurs
end;
end;
dec(nbusers);
ShutDown(p_socket, 2);
l_linger.l_onoff:= 1;
l_linger.l_linger:= 0;
SetSockOpt(p_socket, Sol_Socket, So_Linger,l_absolute_linger, sizeof(l_linger));
l_status:= CloseSocket(p_socket);
if l_status<>0 then form1.logmessage(frame11.memo1,lmtError,ldnone,'[HUB] ERROR : Error in closing client('+ f_name_and_handle(p_socket));
end;
dès qu'il y a la déconection des 24 heures en adsl ou autre il ya un gros probleme d'exception du fait de la quantité d'utilisateurs connectes au serveur. et donc le serveur se fige et n'accepte plus aucunes connections ... si une personne a une idée ....