1

我有一个程序可以在 Mac OS 10.6 上正常工作,但在 10.8 中莫名其妙地失败了。它的要点是 sendto 现在返回 -1 并将 errno 设置为 EINVAL (22)。怎么了?

4

1 回答 1

5

我给 sendto 的地址来自 getaddrinfo 的第一个结果。原来,第一个结果现在是 IPV6 结果(使用 sockaddr_in6)。OS 10.8 上的 sendto(至少现在)似乎只适用于 sockaddr_in 地址。确保向 getaddrinfo 传递一个提示,表明您只需要 ipv4 地址,即

struct addrinfo hint;
memset( &hint, 0, sizeof(struct addrinfo));
hint.ai_family = AF_INET;

struct addrinfo* result;
int res = getaddrinfo( friendlyHostname, NULL, &hint, &result );

阅读http://linux.die.net/man/3/getaddrinfo了解更多信息。

于 2012-10-29T19:05:58.000 回答