anchor.diff:  
   
   constructor TPipeStreamBase.Create( aEnableOverlapped : Boolean;
  -                                    const aTimeOut : DWORD = DEFAULT_THRIFT_TIMEOUT);
  +                                    const aTimeOut, aOpenTimeOut : DWORD);
   begin
     inherited Create;
  -  ASSERT( aTimeout > 0);
  -  FPipe       := INVALID_HANDLE_VALUE;
  -  FTimeout    := aTimeOut;
  -  FOverlapped := aEnableOverlapped;
  +  ASSERT( aTimeout > 0);  // aOpenTimeout may be 0
  +  FPipe        := INVALID_HANDLE_VALUE;
  +  FTimeout     := aTimeOut;
  +  FOpenTimeOut := aOpenTimeOut;
  +  FOverlapped  := aEnableOverlapped;
   end;
   
   
  
positive.code:                         const aEnableOverlapped : Boolean;
                          const aShareMode: DWORD = 0;
                          const aSecurityAttributes: PSecurityAttributes = nil;
                          const aTimeOut : DWORD = DEFAULT_THRIFT_TIMEOUT);  overload;
    end;
  
  
  
negative.code: begin
    if IsOpen then Exit;
  
    retries := Max( 1, Round( 1.0 * FOpenTimeOut / INTERVAL));
    timeout := FOpenTimeOut;
  
    // if the server hasn't gotten to the point where the pipe has been created, at least wait the timeout
    // According to MSDN, if no instances of the specified named pipe exist, the WaitNamedPipe function
    // returns IMMEDIATELY, regardless of the time-out value.
    // Always use INTERVAL, since WaitNamedPipe(0) defaults to some other value
    while not WaitNamedPipe( PChar(FPipeName), INTERVAL) do begin
      dwErr := GetLastError;
      if dwErr <> ERROR_FILE_NOT_FOUND
  