How can I recvive the ICMP packet (ICMP_PORT_UNREACH)?

92 Views Asked by At

I can find udp packet and ICMP packet in Wireshark, but recvfrom() return -1 when I use it to recvive ICMP packet in my program. I use GetLastError() and the error code is 10022.

send_sa.sin_family = AF_INET;
send_sa.sin_addr.s_addr = inet_addr(treeRoot);
SOCKET sockSend = socket(AF_INET, SOCK_DGRAM, 0);
……
send_sa.sin_port = htons(portCurr);


SOCKET sockRecv = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
……
//int res = sendto(sockSend, NULL, 0, 0, (struct sockaddr*)&send_sa, sizeof(send_sa));
    connect(sockSend, (struct sockaddr*)&send_sa, sizeof(send_sa));
    send(sockSend, NULL, 0, 0);
……
re = recvfrom(sockRecv, buff, sizeof(buff), 0, (struct sockaddr*)&send_sa, (socklen_t*)&structlen);
0

There are 0 best solutions below