기존 소켓에서 사용하던 inet_addr(), inet_ntoa() 함수들을 사용하면
error C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings error C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings |
이런 에러가 발생한다.
물론 4996 error는 옵션변경으로 warning으로 처리되게 하거나 warning 조차도 안보이게 할 순 있지만, IPv4 전용 함수이기 때문에 IPv6 사용을 대비해서 호환성 좋은 함수로 변경해서 쓰도록 하자.
inet_addr()는 inet_pton() 함수로, inet_ntoa()는 inet_ntop()로 대체해서 사용할 수 있다.
inet_pton 함수 원형 (문자 주소를 숫자 주소로 변환)
INT WSAAPI inet_pton(
INT Family,
PCSTR pszAddrString,
PVOID pAddrBuf
);
Family: 주소의 family로 AF_INET(IPv4)와 AF_INET6(Ipv6) 중에서 사용할 수 있다.
pszAddrString: family에 맞는 IP주소의 문자열의 주소를 의미한다.
pAddrBuf: IP 주소의 정수를 저장할 버퍼의 주소를 의미한다. AF_INET인 경우엔 IN_ADDR 크기보다, AF_INET6인 경우엔 IN6_ADDR 크기보다 큰 버퍼를 전달해야 한다.
return: 오류가 발생하지 않으면 inet_pton 함수는 1을 반환한다. 유효한 주소 문자열이 아닌 경우엔 0을 반환하고 그 외엔 -1을 반환하는데, 이 경우 WSAGetLastError() 함수를 통해 좀 더 자세한 원인을 찾을 수 있다.
에러 코드 | 의미 |
WSAEAFNOSUPPORT (10047) | 잘못된 family를 지정했음 |
WSAEFAULT (10014) | pszAddrString 또는 pAddrBuf에 잘못된 주소를 전달했음 |
inet_ntop 함수 원형 (숫자 주소를 문자 주소로 변환)
PCSTR WSAAPI inet_ntop(
INT Family,
const VOID *pAddr,
PSTR pStringBuf,
size_t StringBufSize
);
Family: 주소의 family로 AF_INET(IPv4)와 AF_INET6(Ipv6) 중에서 사용할 수 있다.
pAddr: 문자열로 변환할 네트워크 바이트의 IP주소의 포인터. IPv4 주소의 경우는 IN_ADDR, IPv6 주소의 경우는 IN6_ADDR struct를 가리켜야 한다.
pStringBuf: IP 주소를 저장할 버퍼의 포인터. IPv4는 16자, IPv6는 46자 이상의 크기를 가진 버퍼를 등록해야 한다.
StringBufSize: pStringBuf의 크기
return: 오류가 발생하지 않으면 inet_ntop 함수는 IP주소의 문자열 표현을 저장한 버퍼의 포인터를 반환하고, 오류가 발생하면 NULL값이 반환된다. 이 경우 WSAGetLastError() 함수를 통해 좀 더 자세한 원인을 찾을 수 있다.
에러 코드 | 의미 |
WSAEAFNOSUPPORT (10047) | 잘못된 family를 지정했음 |
ERROR_INVALID_PARAMETER | pStringBuf에 NULL 포인터 이거나 크기가 적은 버퍼, 또는 StringBufSize가 0인 경우 |
#define InetPtonA inet_pton
#define InetNtopA inet_ntop
#ifdef UNICODE
#define InetPton InetPtonW
#define InetNtop InetNtopW
#else
#define InetPton InetPtonA
#define InetNtop InetNtopA
#endif
https://docs.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-ws2tcpip-inet_pton
https://docs.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-ws2tcpip-inet_ntop
'프로그래밍 > C,C++' 카테고리의 다른 글
c++ Infographics & Cheat Sheets (0) | 2021.10.18 |
---|---|
Multibyte ↔ UNICODE ↔ UTF8 변환하기 (0) | 2021.10.15 |
enum 크기 (0) | 2021.10.06 |
자주 사용하는 함수 (0) | 2021.07.30 |
[C++] 동적 배열을 이용한 stack (0) | 2021.06.30 |