J'avance j'avance 

 J'ai trouvé une autre erreur je crois bien.
Lors de du Func _TCPServer_Process(), tu fais des Call en envoyant $i en 2ème paramètre :
Call($__TCPSrv_Info_CB_LOST, $i, $__TCPServer_Sockets[$i][1])
Or c'est plutôt $__TCPServer_Sockets[$i][0] qui nous intéresse, car c'est la VRAIE ID du client. Ton exemple est alors faut car tu fais dans Func _TCP_Recv($iSocket, $sIP, $Data) :
Local $nick = _TCPServer_ClientPropertyGet($iSocket, 0)
Mais je peux me tromper car ce n'est pas mon UDF.
PS : Ce que j'appelle VRAIE ID, c'est par exemple 689 ou 742. 
En passant, cette ID peut-elle être égale à 0 ? Car j'initialise $client_id (ma variable contenant le client principal de mon prog) à 0 
 j'ai trouvé, la VRAIE ID c'est le retour de TCPListen 

 et donc je crois bien que tu t'es trompé.
Ma correction :
► Afficher le texte
Code : Tout sélectionner
Func _TCPServer_Process()
    If Not _TCPServer_IsStarted() Then Return SetError(-1, 0, 0)
    ; ---
    Local $hNewSocket, $recv, $tmp
    ; ---
    ; Check new connexions
    $hNewSocket = TCPAccept($__TCPSrv_Info_SOCKET)
    If $hNewSocket <> -1 Then
        __TCPServer_StoreNewClient($hNewSocket)
    EndIf
    ; ---
    ; Process Connected clients
    For $i = 1 To $__TCPServer_Sockets[0][0]
        If $__TCPServer_Sockets[$i][0] = -1 Then ContinueLoop
        ; ---
        $recv = TCPRecv($__TCPServer_Sockets[$i][0], 4096)
        ; ---
        ; Check disconnection
        If @error Then
            If $__TCPSrv_Info_CB_LOST <> "" Then _
                Call($__TCPSrv_Info_CB_LOST, $__TCPServer_Sockets[$i][0], $__TCPServer_Sockets[$i][1])
            ; ---
            TCPCloseSocket($__TCPServer_Sockets[$i][0])
            __TCPServer_ResetSocket($i)
        EndIf
        ; ---
        ; Check Receiving
        If $recv Then
            $__TCPServer_Sockets[$i][3] = TimerInit()
            $__TCPServer_Sockets[$i][2] &= $recv
            ; ---
            If $__TCPSrv_Info_CB_RECEIVING <> "" Then _
                Call($__TCPSrv_Info_CB_RECEIVING, $__TCPServer_Sockets[$i][0], $__TCPServer_Sockets[$i][1], BinaryLen($__TCPServer_Sockets[$i][2]))
        EndIf
        ; ---
        ; Check timeout
        If $__TCPServer_Sockets[$i][2] Then
            If TimerDiff($__TCPServer_Sockets[$i][3]) >= $__TCPSrv_Info_TIMEOUT Then ; Timed-out!
                If $__TCPSrv_Info_CB_TIMEDOUT <> "" Then _
                    Call($__TCPSrv_Info_CB_TIMEDOUT, $__TCPServer_Sockets[$i][0], $__TCPServer_Sockets[$i][1], BinaryLen($__TCPServer_Sockets[$i][2]))
                ; ---
                $__TCPServer_Sockets[$i][2] = ""
            EndIf
        EndIf
        ; ---
        ; Check buffer
        $tmp = __TCPServer_SocketCheckBuffer($i)
        If IsArray($tmp) Then
            For $elem In $tmp
                If $__TCPSrv_Info_CB_RECV <> "" Then _
                    Call($__TCPSrv_Info_CB_RECV, $__TCPServer_Sockets[$i][0], $__TCPServer_Sockets[$i][1], $elem)
            Next
            ; ---
            $__TCPServer_Sockets[$i][2] = ""
        EndIf
    Next
    ; ---
    Return 1
EndFunc