Sto provando a eseguire il porting di un programma TraceRoute da Linux a OSX e ho difficoltà a trovare l'equivalente IP_RECVERR.equivalente OSX per IP_RECVERR
Il modo in cui la maggior parte delle persone fanno il parsing del pacchetto è:
setsockopt (sock, IPPROTO_IPV4, IP_RECVERR, &on, sizeof (on))
E poi, quando il pacchetto arriva a fare qualcosa sulla falsariga di:
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;
}
}
Non C'è anche un sock_extended_err su OSX che è problematico. Ho davvero bisogno di sapere se ho avuto un errore, e dove l'errore ha avuto origine.
Su 'OS X' la cosa più vicina (cioè integrata) sarebbe probabilmente' SO_ERROR'. –
Non sembra che abbia un errore "TTL ottenuto a 0". – kmdent
Quando si utilizza 'IP_RECVERR' quale tipo di valore restituisce? Se vuoi ottenere il valore 'TTL' attuale devi usare qualcosa come' getsockopt (fd, SOL_SOCKET, SO_ERROR, & errcode, &len); ' –