cmfab
19-10-2014, 14:58:23
Hola a todos, tengo un servidor DataSnap, sucede que la aplicación cliente cada cierto intervalo debe conprobar si existe este servidor en la IP y puerto determinados, para concocer esto uso la función siguiente:
function PortTCP_IsOpen(dwPort : Word; ipAddressStr:AnsiString) : boolean;
var
client : sockaddr_in;
sock : Integer;
ret : Integer;
wsdata : WSAData;
begin
Result:=False;
ret := WSAStartup($0002, wsdata); //Inicializa Winsock
if ret<>0 then exit;
try
client.sin_family := AF_INET; //Establece el protocolo a usar en este caso (IPv4)
client.sin_port := htons(dwPort);
client.sin_addr.s_addr := inet_addr(PAnsiChar(ipAddressStr));
sock :=socket(AF_INET, SOCK_STREAM, 0); //crea un socket
Result:=connect(sock,client,SizeOf(client))=0; //Estable conexión con un socket
finally
WSACleanup;
end;
end;
lo que me sucede es que cuando mido el consumo de memoria del servidor este aumenta considerablemente cuando el cliente usa esta función, no se si está quedando algún objeto por liberar en el algoritmo, pero no encuentro como bajar el consumo de memoria, o si existe otra manera de saber si está activo el servidor, na posibilidad sería hacer la conexión mediante el bloque try ... except, pero me gustaría poder depurar esta función que la uso en otras tareas y hacer que baje el consumo al comprobar la ip y puerto
Gracias e antemano a todos por las atenciones
function PortTCP_IsOpen(dwPort : Word; ipAddressStr:AnsiString) : boolean;
var
client : sockaddr_in;
sock : Integer;
ret : Integer;
wsdata : WSAData;
begin
Result:=False;
ret := WSAStartup($0002, wsdata); //Inicializa Winsock
if ret<>0 then exit;
try
client.sin_family := AF_INET; //Establece el protocolo a usar en este caso (IPv4)
client.sin_port := htons(dwPort);
client.sin_addr.s_addr := inet_addr(PAnsiChar(ipAddressStr));
sock :=socket(AF_INET, SOCK_STREAM, 0); //crea un socket
Result:=connect(sock,client,SizeOf(client))=0; //Estable conexión con un socket
finally
WSACleanup;
end;
end;
lo que me sucede es que cuando mido el consumo de memoria del servidor este aumenta considerablemente cuando el cliente usa esta función, no se si está quedando algún objeto por liberar en el algoritmo, pero no encuentro como bajar el consumo de memoria, o si existe otra manera de saber si está activo el servidor, na posibilidad sería hacer la conexión mediante el bloque try ... except, pero me gustaría poder depurar esta función que la uso en otras tareas y hacer que baje el consumo al comprobar la ip y puerto
Gracias e antemano a todos por las atenciones