Возникла следующая проблемка, необходимо отбросить "мертвые" IP адреса.
При проходе по подсети я коннектюсь к каждому айпишнику, но если в данный момент компьютер не включен то коннект проходит очень долго и изза этого тормозится весь процесс. Вопрос в том как мне реализовать этот мини пинг? Знаю что пинг использует ICMP протокол, но как мне правильно настроить сокет?? Кто с этим работал??
Вот кусочек моего кода проверки наличия компа в сети.
Код:
Код: Выделить всё
if (WSAStartup(0x0101, &wsadata)!=SOCKET_ERROR)
{
SOCKET s=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
if (s!=INVALID_SOCKET)
{
sockaddr_in adrr;
int nTempTTL = 1; //TTL Какое должно быть
значение?? в чем оно измеряется в секундах или в мили секундах??
setsockopt(s, IPPROTO_IP, IP_TTL, (char*) &nTempTTL, sizeof(nTempTTL));
int nTempTOS = 1; //TOS - type-of-service, что это такое счем едет какие значения принимает??
setsockopt(s, IPPROTO_IP, IP_TOS, (char*) &nTempTOS, sizeof(nTempTTL));
unsigned int ip = inet_addr(FullAddress);
phe = gethostbyaddr((char*)&ip,4,AF_INET );
adrr.sin_addr.S_un.S_addr=((struct in_addr *)phe->h_addr_list[0])->s_addr;
char buff[100];
adrr.sin_family = AF_INET;
sendto(s, buff, sizeof(buff), 0, (sockaddr*)&addr, sizeof(addr))
re = WSAGetLastError();
}
}И так вопросов сразу оч много
TTL Какое должно быть значение?? в чем оно измеряется в секундах или в мили секундах??
TOS - type-of-service, что это такое счем едет какие значения принимает??
На какой порт отсылать информацию, что должен содержать buff.
Спасибо за рание.
Ещё кому-нибудь пригодится...