sendto在Mac OS X 10.8上返回EINVAL

时间:2012-10-29 19:05:58

标签: c macos sockets network-programming sendto

我有一个适用于Mac OS 10.6的程序但在10.8中莫名其妙地失败了。它的要点是sendto现在返回-1并将errno设置为EINVAL(22)。出了什么问题?

1 个答案:

答案 0 :(得分:5)

我给sendto的地址来自getaddrinfo的第一个结果。事实证明,第一个结果现在是IPV6结果(使用sockaddr_in6)。 OS 10.8上的sendto(至少目前为止)似乎只适用于sockaddr_in地址。确保传递一个提示,告诉你只需要ipv4地址的getaddrinfo,即

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了解详情。