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 アドレスでのみ動作するようです。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を参照してください。

于 2012-10-29T19:05:58.000 に答える