[c++] sprawdzanie czy ip jest aktywny?

0

w jaki szybki sposob mozna sprawdzic czy dany ip w sieci lokalnej jest aktualnie wykozystywany (czy komputer o danym ip jest uruchomiony) ?
tzn uzywam funkcji gethostbyaddr by sie przekonac czy komputer docelowy odpowie, jezeli komputer docelowy odpowie to dobrze, a jezeli nie to procedura pochlania ok 3 sekundy... ta wiedza jestmi potrzebna do wywolania funkcji
connect(), poniewaz gdy IP nie odpowiada to wowczas funkcja connect() nie konczy sie (i program nie "idzie" dalej) ...

albo prosciej i inaczej: jak ustawic (i czy sie da) limit czasu oczekiwania na odpowiedz dla funkcji connect() ?

dodam, ze ogolnie chodzi o laczenie sie w sieci przy pomocy funkcji winapi
(socket(), connect() itp)

0

jeśli koniecznie chcesz przez connect() to zmień właściwość tej funkcji na nieblokującą, potrzebne do tego będzie jakieś okno i wywołanie funkcji WSAAsyncSelect(socket, hwnd, WM_USER, FD_CONNECT). Zaraz po tej funcji uruchom timera np. 1s - jeśli przed tym czasem nie przyjdzie message WM_USER z LPARAM=FD_CONNECT to znaczy że host nie odpowiada i trzeba zamknąć socket

Możesz puścić do niego pinga IcmpSendEcho() jeśli masz XP, ale ta funkcja też blokuje na ponad sekundę pomimo podaniania małego timeout

Możesz wywołać systemowego pinga "ping", "ip >c:\ping.txt" i sprawdzać zawartość owego pliku

Możesz wysłać do niego żądanie o podanie numeru MAC (też blokuje jeśli host jest off) SendARP(ipnr, 0, &mac, &maclen)

1 użytkowników online, w tym zalogowanych: 0, gości: 1