I am using TTCPBlockSocket
for a TCP/IP Application . The problem is that I can't determine when the connection is lost.
GetLastError
returns 0Read
returns 0
But I encounter these values eaven if the application is connected so I can get it how can I be notified when the TCP/IP connection is lost.
Thanks
I would say, you can use the CanRead
method, passing 0 to its Timeout
parameter. This function internally performs select
function for the socket and returns False when an error occurs. It should be enough to use just this method since the select
function returns SOCKET_ERROR
if you lose the connection, and it causes the CanRead
method return False as a result. So I think, it's enough to check if the socket connection is alive this way:
function IsSocketAlive(ASocket: TTCPBlockSocket): Boolean;
begin
Result := ASocket.CanRead(0);
end;
As opC0de says, to check if the client is still connected you need to both check TCPBlockSocket.CanRead(0) and TCPBlockSocket.WaitingData = 0
function IsSocketAlive(ASocket: TTCPBlockSocket): Boolean;
begin
Result := (ASocket.Socket = INVALID_SOCKET) or ((ASocket.WaitingData = 0) and ASocket.CanRead(0));
end;
I'm using this way in my projects so I can confirm that it works.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With