getnameinfo Non-recoverable name resolution failure 错误

原文地址:

http://www.jimmo.org/non-recoverable-name-resolution-failure-with-getnameinfo-on-solaris/


函数原型:

int getnameinfo(const struct sockaddr *sa, socklen_t salen,
          char *host, socklen_t hostlen, char *serv, socklen_t servlen,
          int flags);

在linux中,类似代码:

struct sockaddr_storage saddr; //给saddr赋值 getnameinfo((struct sockaddr*)&saddr,sizeof(saddr),....); 这段代码可以运行良好,因为linux中getnameinfo会查看saddr中的sin_family计算出真正的salen。 但是在其他系统中,比如Solaris,并没有这样的机制,所以会返回错误4,即Non-recoverable name resolution failure错误。 同样在安卓中也有这个错误! 解决办法就是传入真正的salen。 比如IP4就使用sizeof(struct sockaddr_in); IP6就使用sizeof(struct sockaddr_in6);

你可能感兴趣的:(getnameinfo Non-recoverable name resolution failure 错误)