IP_RECVERR 的 OSX 等效项

2024-04-14

我正在尝试将 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(使用前将#替换为@)

IP_RECVERR 的 OSX 等效项 的相关文章

随机推荐