Delphi-Quellcode:
const INADDR_NONE = DWORD($FFFFFFFF);
type u_long = Longint;
function inet_addr(cp: PAnsiChar): u_long; stdcall;
Da war mal wieder irgend ein Idiot (oder doofes Übersetzungscript) am Werk:
u_long = unsigned Long = LongWord
DWORD(-1), also 4.294.967.295 kann niemals in LongInt reinpassen, und demnach ist ein Vergleich auf <> immer true.
Aber sowas hätte man auch selber schnell rausbekommen können, wenn man sich die Typen mal ansieht.
Delphi-Quellcode:
function IsValidIP(const aIP: AnsiString): Boolean;
begin
Result := (aIP <> '') and (LongWord(inet_addr(PAnsiChar(aIP))) <> INADDR_NONE);
end;
oder
Delphi-Quellcode:
function IsValidIP(const aIP: AnsiString): Boolean;
begin
Result := (aIP <> '') and (inet_addr(PAnsiChar(aIP)) <> LongInt(INADDR_NONE));
end;