OSX等效于IP_RECVERR

时间:2015-04-28 23:39:46

标签: c linux macos network-programming traceroute

我正在尝试将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是有问题的。我真的只需要知道是否有错误,以及错误源自何处。

1 个答案:

答案 0 :(得分:1)

很抱歉,但OS X不支持扩展IP_RECVERR套接字功能。

您可以使用:#ifdef IP_RECVERR使其在OS X上构建,其中RECVERR / ERRQUEUE不存在。

但如果您正在寻找特定的代码执行,我认为您必须移植IP_RECVERR套接字功能&在Mac OS X中MSG_ERRQUEUE。听起来像“我有新东西要玩”。快乐的编码。