Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   WinSock - INADDR_NONE ¿Cómo cambiar signo al valor? (https://www.clubdelphi.com/foros/showthread.php?t=89838)

Jota69 16-02-2016 03:01:28

WinSock - INADDR_NONE ¿Cómo cambiar signo al valor?
 
Buenas con todos.
Actualmente me encuentro trabajando con sockets utilizando la API de windows. En la siguiente comparación:
Código:

if Result.S_addr = INADDR_NONE then
  begin
    // codigo;
  end;

En Result.S_addr tengo un valor que es -1 y la compara con la constante INADDR_NONE que en la api de windows equivale a: DWORD($FFFFFFFF) que en decimal es igual a 4294967295 por lo tanto esa sentencia siempre va a dar como resultado False y nunca va a entrar en el IF.
Como puedo hacer para que se tome con signo a la constante INADDR_NONE?

Muchas gracias por su ayuda.

PD: Estoy usando RAD studio 10.

Ñuño Martínez 16-02-2016 11:42:19

Puedes usar operadores de bit. Por ejemplo:
Código Delphi [-]
IF (RESULT.S_addr XOR INADDR_NONE) = 0 THEN
BEGIN
  { Código; }
END;

No lo he comprobado, pero la idea es esa.

Jota69 17-02-2016 00:14:59

Pues la verdad lo he resuelto asi:
Código:

if Result.S_addr = u_long(INADDR_NONE) then
begin
  ...
end;

Pasa que S_addr es declarado como u_long (en WinSock), pero u_long esta definido como 'signed' Longint en lugar de 'unsigned' Longword. Entonces la solucion es hacer un cast.


La franja horaria es GMT +2. Ahora son las 13:17:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi