Я пытаюсь перенести программу TraceRoute из Linux в OSX, и мне трудно найти эквивалент IP_RECVERR.
Как большинство людей проводят парсинг пакетов:
setsockopt (sock, IPPROTO_IPV4, IP_RECVERR, &on, sizeof (on))
И затем, когда пакет входит, выполните что-то в строках:
sock_extended_err* err = nullptr;
for (cmsghdr* cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
switch (cmsg->cmsg_level) {
case IPPROTO_IPV4:
if (cmsg->cmsg_type == IP_RECVERR) {
err = (sock_extended_err*)CSMSG_DATA(cmsg);
}
break;
}
}
В OSX также нет sock_extended_err, что проблематично. Мне просто нужно знать, была ли ошибка, и откуда возникла ошибка.