이 코드는 Windows에서 정상적으로 작동하지만 gethostbyaddr은 Linux에서 NULL을 반환합니다.gethostbyaddr는 Windows에서는 정상이지만 Linux에서는 NULL을 반환합니다.
나는 많은 변화를 시도했지만 성공하지 못했습니다.
내 /etc/host.conf 파일은 다음 줄을
위해 호스트의 주소를 확인하고 잘 작동 gethostbyaddr를 창에 주소 11.234.456.74, 을
나는 전체 코드를 실행 바인딩하고 통과 있습니다. 그러나 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' 값은 무엇입니까? –
댓글을 주신 Daniel에게 감사드립니다. 오타입니다. 나는 말하고 싶다. 11.234.217.74 이것은 유효한 주소이다. Windows에서 코드를 실행할 때 올바르게 해석됩니다. 그러나 Linux에서 실행되는 데는 실패합니다. Linux에서 gethostbyaddr가 NULL을 반환합니다. – Hatems
당신은'destAdr'을위한 메모리를 할당했습니다, 그러나 그것은 빈 것처럼 보입니다 ... 적어도 당신의 샘플 코드에서. – shinkou