Hi pde...@gmail.com
I still think there is a little bug in OverbyteIcsWSocket.pas (most recent
version 8.06 of OverbyteIcsWSocket.pas [ISC v7 was OK]) wihich causes this
problem in
function TCustomWSocket.Send(Data : TWSocketData; Len : Integer) : Integer;
at line PostMessage(Handle, FMsg_WM_ASYNCSELECT, FHSocket,
IcsMakeLong(FD_WRITE, 0));
[described in my posts 7.11. 12.11.2013]
In some cases the values of FHSocket, FState are FHSocket <>1 and FState =
wsConneced WHILE ENTERING the function TCustomWSocket.Send - BUT their
values change to -1, wsClosed in TryToSend; [socket not connected]
If these values change to -1, wsClosed (in TryToSend; ) the error you
describe occurs.
To get rid of the error you mention:
1. Open OverbyteIcsWSocket.pas
2. In OverbyteIcsWSocket.pas search for TCustomWSocket.Send.
Code "as is":
if bAllSent then begin
{ We post a message to fire the FD_WRITE message which in turn will}
...
{ the send function. }
PostMessage(Handle,
FMsg_WM_ASYNCSELECT,
FHSocket,
IcsMakeLong(FD_WRITE, 0));
end;
Add the line "if FHSocket > 0" :
if bAllSent then begin
{ We post a message to fire the FD_WRITE message which in turn will}
...
{ the send function. }
if FHSocket > 0 then // add this line...
PostMessage(Handle,
FMsg_WM_ASYNCSELECT,
FHSocket,
IcsMakeLong(FD_WRITE, 0));
end;
This fixes your problem.
or even better:
Go to the procedure TryToSend; and set the variable bAllSent to false
whenever an error like #10057 occurrs. This fixes the problem too.
Regards
Michael
Message: 1
Date: Sat, 21 Dec 2013 15:06:45 +0200
From: ????? ??????? <pde...@gmail.com>
To: "twsocket@lists.elists.org" <twsocket@lists.elists.org>
Subject: [twsocket] Errors while send, if client disconnected from
socket
Message-ID:
<CA+70vSCkD396D+CbzGpCzxWFhPNX68VktK9byvTwQw6fuF=j...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
Hello
Sometimes client can disconnect on multithreaded server while send, after
that I receive
"Range check error" or
"Socket is not connected (#10057 in Send)"
How can I avoid these errors?
I'm checking client state before send.
Must I ignore both these errors? If yes, I can understand to ignore
"#10057", but why shuld I ignore "range check error".
It is very rarely error (one time on 1.000.000 send), but it happens every
day on my server.
//TTCPClient = class(TsslWSocketTHrdClient)
if (FTcpClient as TTCPClient).state = wsConnected then
try
(ftcpclient as TTCPClient).Send(data, 4);
// here error (in debug I see that client disconnected after entering in
function Send
except
on e: exception do
log.debug('Error in sendstr TClient.writelnuncompressed:' +
e.Message);
end;
Thank you.
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be