Следующий текст кода вызывает возмущение! При запуске программы смотрю Tcpdump и вижу следующую картину
tcpdump: listening on lo0
17:21:54.132477 127.0.0.1 > 127.0.0.1: icmp: echo request (ttl 64, id 5424, len
1044)
а при запуске Ping на 127.0.0.1
tcpdump: listening on lo0
17:23:07.147881 127.0.0.1 > 127.0.0.1: icmp: echo request (ttl 64, id 5651, len84)
17:23:07.147974 127.0.0.1 > 127.0.0.1: icmp: echo reply (ttl 64, id 5652,len 84)
Может кто нибудь объяснить почему я не получаю ответ (echo reply)????Программа подвисает на выполнении recv()
Заранее благодарен.
int main(void)
{
int sockfd,i,hold;
struct sockaddr_in to;
struct icmp *icmp_h;
char *buffer=(char *)calloc(1024,sizeof(char));
sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
hold=48*1024;
(void)setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, (char *)&hold,
sizeof(hold));
icmp_h = (struct icmp*) buffer;
bzero(icmp_h, sizeof(struct icmp));
icmp_h->icmp_type = ICMP_ECHO;
icmp_h->icmp_code = 0;
icmp_h->icmp_id = 4242;
icmp_h->icmp_seq = 0;
bzero(&to,sizeof(to));
to.sin_family=AF_INET;
inet_pton(AF_INET,"127.0.0.1",&to.sin_addr);
sendto(sockfd, buffer, 1024, 0,(struct sockaddr *) &to, sizeof(to));
i=recv(sockfd, buffer, 1024, 0);
}