Browse Source

fix TServerSocketStream.CanRead result when FServer is gone (this happens on closing the server with open connections)

Ondrej Pokorny 2 years ago
parent
commit
b881deeb9f
1 changed files with 9 additions and 1 deletions
  1. 9 1
      packages/fcl-net/src/ssockets.pp

+ 9 - 1
packages/fcl-net/src/ssockets.pp

@@ -119,7 +119,7 @@ type
     Procedure Close;
     function Seek(Offset: Longint; Origin: Word): Longint; override;
     function Select(aCheck : TSocketStates; TimeOut : Integer): TSocketStates;
-    Function CanRead(TimeOut : Integer): Boolean;
+    Function CanRead(TimeOut : Integer): Boolean; virtual;
     Function Read (Var Buffer; Count : Longint) : longint; Override;
     Function Write (Const Buffer; Count : Longint) :Longint; Override;
     Property SocketOptions : TSocketOptions Read FSocketOptions
@@ -290,6 +290,8 @@ type
   Protected
     Procedure DoOnClose; override;
     Property Server : TSocketServer Read FServer;
+  Public
+    Function CanRead(TimeOut : Integer): Boolean; override;
   end;
 
 {$if defined(unix) or defined(windows)}
@@ -362,6 +364,12 @@ resourcestring
 
 { TServerSocketStream }
 
+function TServerSocketStream.CanRead(TimeOut : Integer): Boolean;
+begin
+  Result:=inherited CanRead(TimeOut);
+  Result:=Result and Assigned(FServer); // main server is gone, cannot read from it
+end;
+
 procedure TServerSocketStream.DoOnClose;
 begin
   if Assigned(FServer) then