Próbuję przenieść program TraceRoute z Linuxa na OSX i mam problem ze znalezieniem równoważnika IP_RECVERR.Odpowiednik OSX dla IP_RECVERR
Sposób większość ludzi parsowania pakietu jest:
setsockopt (sock, IPPROTO_IPV4, IP_RECVERR, &on, sizeof (on))
A potem, kiedy pakiet przychodzi zrobić coś wzdłuż linii:
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;
}
}
Istnieje również nie jest na sock_extended_err OSX, który jest problematyczny. Naprawdę muszę tylko wiedzieć, czy wystąpił błąd i gdzie powstał błąd.
Na "OS X" najbliższą rzeczą (wbudowaną) będzie prawdopodobnie "SO_ERROR". –
Wygląda na to, że nie ma błędu "TTL get to 0". – kmdent
Kiedy używasz 'IP_RECVERR' jaki typ wartości zwraca? Jeśli chcesz uzyskać rzeczywistą wartość 'TTL' musisz użyć czegoś takiego jak' getsockopt (fd, SOL_SOCKET, SO_ERROR i errcode, &len); ' –