Итак, я пытаюсь написать свою собственную программу PING. Я получил почти все, кроме recvfrom части. Я постоянно получаю Ресурс временно недоступен. Я пытался увеличить время ожидания, скажем, 5 секунд. Это не сработало. Pa c - мой ICMP-пакет. Я также использую сокет raw и он находится под IPv4.
clock_gettime(CLOCK_MONOTONIC, &sent);
if (sendto(socketfd, &pac, sizeof(pac), 0, (struct sockaddr*)&out_addr, sizeof(out_addr)) == -1)
{
perror("SENDING FAILED");
}else{
sent_packet++;
}
socklen_t in_addr_len = sizeof(in_addr);
if (recvfrom(socketfd, &pac, sizeof(pac), 0, (struct sockaddr*)&in_addr, &in_addr_len) == -1)
{
perror("\nRECEIVING FAILED");
}else{
received_packet++;
}
clock_gettime(CLOCK_MONOTONIC, &received);
Я также настроил параметры сокета
if (setsockopt(socketfd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof(timeout)) < 0)
{
perror("SET TIMEOUT FAILED");
}
В результате, когда я пингую свой школьный веб-сайт, моя программа распечатывает это, в то время как обычно поле времени должно быть около 11 мс
RECEIVING FAILED: Resource temporarily unavailable
64 bytes from 128.151.77.39: icmp_seq = 0 ttl = 64 time = 0.816000 ms
RECEIVING FAILED: Resource temporarily unavailable
64 bytes from 128.151.77.39: icmp_seq = 1 ttl = 64 time = -998.741000 ms
Я понятия не имею, почему. Я попробовал все другие методы онлайн. Большое спасибо за помощь!