Сразу предупреждаю: яндексил, поиск по форуму юзал.
Нужен простой алгоритм ping-а (без применения тяжеловесов-индейцев, всё на winsock), и если есть ответ от сервера - проверить, открыт ли на нём порт. В результате функция должна вернуть:
-1 - если сервер недоступен
-2 - если сервер доступен, но порт закрыт
иначе среднее из двух-трёх пингов.
То, что имею сейчас:
Код:
function Aviable(ipaddr:string;port:integer):boolean;
var
D:WSAData;
S:TSocket;
A:TSockAddr;
begin
result:=false;
if WSAStartup($101,D)<>0 then exit;
A.sin_family:=AF_INET;
A.sin_addr.S_addr:=inet_addr(pchar(ipaddr));
S:=socket(AF_INET,SOCK_STREAM,0);
if S=INVALID_SOCKET then exit;
A.sin_port:=htons(port);
if connect(S,A,sizeof(A))=0 then result:=true;
WSACleanup;
end;
выдрал из ДелфиВорлда. Но он "застревает", если нету соединения с портом. Если есть метод поставить на нето таймаут - буду признателен. Если доделаю эту с таймаутом, то пинг возможно и сам сумею встроить... Но лучше бы сразу функцию...