> Client.Dup(NewHSocket); // SOMETIMES WHEN HIGH LOAD IS IN PLACE, THIS
> FUNCTION MAKES CLIENT.HSOCKET = -1 AND RAISES THE EXCEPTION "LIST ITEM OUT
> OF INDEX"
I don't know this exception message, do you mean "List index out of bounds()"?
According to procedure Dup, the component state does not seem to be wsClosed.
procedure TCustomWSocket.Dup(NewHSocket : TSocket);
var
iStatus : Integer;
optlen : Integer;
begin
..
if FState <> wsClosed then begin
iStatus := WSocket_Synchronized_closesocket(FHSocket);
FHSocket := INVALID_SOCKET;
if iStatus <> 0 then begin
SocketError('Dup (closesocket)');
Exit;
end;
ChangeState(wsClosed);
end;
FHsocket := NewHSocket;
..
---
Arno Garrels [TeamICS]
http://www.overbyte.be/eng/overbyte/teamics.html
Fastream Technologies wrote:
> Hello,
>
> I have the following function called from worker thread context
> (NewHSocket passed with a message):
>
> function TCustomWSocketMTServer.AfterClientCreated(
> Client : TWSocketMTClient; Error: Word; NewHSocket: integer) :
> boolean; var
> currentClientCount: integer;
> currentMaxClients: integer;
> begin
> Result := TRUE;
>
> FCriticalSection.Enter;
> Inc(FClientNum);
> Client.Name := Name + 'Client' + IntToStr(FClientNum);
> FClientList.Add(Client);
> currentClientCount := FClientList.Count;
> Client.Banner := FBanner;
> Client.Server := Self;
> currentMaxClients := FMaxClients;
> FCriticalSection.Leave;
>
> {$IFNDEF NO_DEBUG_LOG}
> Client.IcsLogger := IcsLogger; {
> V5.04 } {$ENDIF}
>
> Client.Dup(NewHSocket); // SOMETIMES WHEN HIGH LOAD IS IN PLACE,
> THIS FUNCTION MAKES CLIENT.HSOCKET = -1 AND RAISES THE EXCEPTION
> "LIST ITEM OUT OF INDEX"
> Client.OnDataSent := nil;
>
> TriggerClientConnect(Client, Error);
>
> { Ok, the client is still there, process with the connection }
> if (currentMaxClients > 0) and (currentClientCount >
> currentMaxClients) then begin
> { Sorry, too much clients }
> Client.Banner := BannerTooBusy;
> Client.OnDataAvailable := nil; // should be set previously in
> initClient for non-503
> Client.StartConnection;
> Client.CloseDelayed;
>
> Result := false;
> end;
> end;
>
> Any idea?
>
> Best Regards,
>
> SZ
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be