这段代码在Windows上运行正常,但gethostbyaddr在Linux上返回NULL。
我尝试了很多改变,但没有任何成功。
我的/etc/host.conf有以下行
订购主机,绑定
我运行完整代码并传递地址11.234.456.74, 在Windows上gethostbyaddr解析地址并正常工作。 但是在Linux上它不解析ip地址并返回NULL。
请帮忙。
#ifdef WIN32
if (init){
WSADATA wsaData;
// Request Winsock version 2.2
if (WSAStartup (MAKEWORD(1, 1), &wsaData) != 0) {
WSACleanup();
exit (EXIT_FAILURE);
}
init = 0;
}
#endif
// Open required socket
p_socket[IP_SOCKET_SOCKET] = socket(AF_INET, server_socket_type, 0);
if ( p_socket[IP_SOCKET_SOCKET] < 0 ) {
#ifdef WIN32
WSACleanup();
#endif
exit (EXIT_FAILURE);
}
destAdrLen = mxGetM(prhs[0]) * mxGetN(prhs[0]) + 1;
destAdr = (char *) mxMalloc(destAdrLen);
if (destAdr == NULL) {
mexErrMsgTxt("mxMalloc(destAdrLen) failed");
}
mxGetString(prhs[0], destAdr, destAdrLen);
destPort = (int) mxGetScalar(prhs[1]);
if (isalpha(destAdr[0])) {
// socket address is a name
hp = gethostbyname(destAdr);
}
else {
// socket address is a number
addr = inet_addr(destAdr);
hp = gethostbyaddr((char *)&addr, 4, AF_INET);
}
答案 0 :(得分:1)
该主机似乎没有注册反向dns记录。
$ dig -x 11.234.217.74
; <<>> DiG 9.9.1-P2 <<>> -x 11.234.217.74
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 30231
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;74.217.234.11.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
in-addr.arpa. 3599 IN SOA b.in-addr-servers.arpa. nstld.iana.org. 2011026180 1800 900 604800 3600
;; Query time: 1217 msec
因此对gethostbyaddr
的调用将失败。 herror
函数甚至会打印Unknown host
的消息。如果要在这些情况下保留数字IP,则必须自己编写该代码路径。如果Windows做了其他事情,那么看看它从哪里获取信息会很有趣。