2015-04-28 13 views
11

için ben OSX için limana Linux tan TraceRoute programı çalışıyorum ve ben sorun IP_RECVERR eşdeğer bulmakta yaşıyorum.OSX eşdeğer IP_RECVERR

çoğu insan paket ayrıştırma yapmak yoludur: paket gelir çizgisinde bir şey yaptığım zaman sonra

setsockopt (sock, IPPROTO_IPV4, IP_RECVERR, &on, sizeof (on)) 

Ve:

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

ayrıca sock_extended_err üzerinde yok OSX sorunlu. Gerçekten sadece bir hata olup olmadığını ve hatanın nereden kaynaklandığını bilmem gerek.

+0

(yani dahili) muhtemelen' SO_ERROR' olurdu. –

+0

"TTL 0'a var" hatasına sahip gibi görünmüyor. Kullandığınız – kmdent

+0

'IP_RECVERR' o değer türünü çıkmıyor? Eğer gerçek TTL değerini elde etmek istiyorsanız, getsockopt (fd, SOL_SOCKET, SO_ERROR, & errcode, &len);, –

cevap

1

Maalesef söylemek ancak OS X IP_RECVERR soket yetenekleri genişletilmiş destekleyen değildir.

Sen kullanabilirsiniz: #ifdef IP_RECVERR RECVERR/ERRQUEUE yoktur nerede OS X üzerinde inşa yapmak. o belirli kod çalıştırma arıyorsanız

Ama siz "Ben oynamaya yeni şeyler var" gibi mac OS X Thats ses portu IP_RECVERR soket yeteneği & MSG_ERRQUEUE gerek. Mutlu kodlama. `OS X` yakın şeyle

+0

Bu problemi çözmese de Bu ödülün boşa gitmesine izin vermeyeceğim! – kmdent

+0

Teşekkür ederim adamım .. –