這段代碼在Windows上工作正常,但gethostbyaddr在Linux上返回NULL。gethostbyaddr在Windows上正常,但在Linux上返回NULL
我已經嘗試過這麼多的改變,但沒有任何成功。
我/etc/host.conf中有如下一行
爲了主機,結合
我運行的完整代碼,並通過地址11.234.456.74, 在窗口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);
}
11.234.456.74不是有效的IPv4地址,這可能是原因。 'h_errno'有什麼價值? – 2012-08-06 15:02:28
感謝Daniel評論。這是一個錯字。我只想說11.234.217.74這是一個有效的地址。它在Windows上運行代碼時可以正確解析。但是在Linux上運行失敗。 gethostbyaddr在Linux上返回NULL。 – Hatems 2012-08-06 16:19:08
您爲'destAdr'分配了內存,但它看起來像是空的......至少在您的示例代碼中。 – shinkou 2012-08-06 16:37:13