Для воспроизведения нужно:
UniConnection.SpecificOptions.Values['UseUnicode'] := 'True';
UniConnection.SpecificOptions.Values['Direct'] := 'True';
Соединение разрывать не обязательно, можно сэмулировать ошибку исправлением TCRVioTcp.ReadNoWait - закомментировать проверку результата и указать код ошибки, например, 10060:
Код: Выделить всё
function InernalReceive(Loop: integer): integer;
begin
Result := recv(FSd, buffer[offset], count, 0);
// if Result = SOCKET_ERROR then begin
// {$IFDEF UNIX}
// if (GetSocketError = ESysEINTR) and (Loop > 0) then begin
// sleep(50);
// Result := InernalReceive(Loop - 1);
// end
// else
// {$ENDIF}
begin
// FLastErrorCode := GetSocketError;
FLastErrorCode := 10060;
FLastError := Format(SErrorOnDataReading, [SysErrorMessage(FLastErrorCode), FLastErrorCode, FLastErrorCode]);
Result := 0; // silent error handling
end;
// end;
end;
Код: Выделить всё
if FUseUnicode then
Msg := string(CRFunctions.UTF8Decode(MsgBuf))