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);