我正在尝试将 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 这是有问题的。我真的只需要知道是否有错误以及错误源自何处。
抱歉,OS X 不支持扩展IP_RECVERR
套接字功能。
您可以使用:#ifdef IP_RECVERR
使其构建在不存在 RECVERR/ERRQUEUE 的 OS X 上。
但是如果您正在寻找特定的代码执行,我认为您必须移植IP_RECVERR
插座能力 &MSG_ERRQUEUE
在 mac OS X 中。这听起来就像“我有新东西要玩”。快乐编码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)