다음을 통해 공유


NotifyAddrChange 함수(iphlpapi.h)

NotifyAddrChange 함수는 IPv4 주소를 인터페이스에 매핑하는 테이블에서 변경이 발생할 때마다 호출자에게 알림을 보냅니다.

구문

IPHLPAPI_DLL_LINKAGE DWORD NotifyAddrChange(
  [out] PHANDLE      Handle,
  [in]  LPOVERLAPPED overlapped
);

매개 변수

[out] Handle

GetOverlappedResult 함수에 대한 후속 호출에서 사용할 파일 핸들을 수신하는 HANDLE 변수에 대한 포인터입니다.

경고 이 핸들을 닫지 말고 완료 포트와 연결하지 마세요.
 

[in] overlapped

IP 주소를 인터페이스에 매핑하는 테이블의 변경 내용을 호출자에게 알리는 OVERLAPPED 구조체에 대한 포인터입니다.

반환 값

함수가 성공하면 호출자가 Handle겹치는 매개 변수에 대해 NULL을 지정하면 반환 값이 NO_ERROR. 호출자가 NULL 이 아닌 매개 변수를 지정하면 성공에 대한 반환 값이 ERROR_IO_PENDING.

함수가 실패하면 FormatMessage를 사용하여 반환된 오류에 대한 메시지 문자열을 가져옵니다.

반환 코드 설명
ERROR_CANCELLED
컨텍스트가 등록 취소되어 호출이 즉시 취소되었습니다.
ERROR_INVALID_PARAMETER
잘못된 매개 변수가 전달되었습니다. 핸들겹치는 매개 변수가 모두 NULL이 아니지만 입력 매개 변수로 지정된 메모리를 호출 프로세스에서 작성할 수 없는 경우 이 오류가 반환됩니다. 이 오류는 클라이언트가 이미 변경 알림 요청을 수행한 경우에도 반환되므로 이 중복 요청은 실패합니다.
ERROR_NOT_ENOUGH_MEMORY
작업을 완료하는 데 사용할 수 있는 메모리가 부족했습니다.
ERROR_NOT_SUPPORTED
이 오류는 Windows 98/95 및 Windows NT 4.0과 같이 이 함수가 지원되지 않는 Windows 버전에서 반환됩니다.

설명

The
NotifyAddrChange 함수는 다음 두 가지 방법으로 호출될 수 있습니다.

  • 동기 메서드
  • 비동기 메서드

호출자가 핸들겹치는 매개 변수에 대해 NULL을 지정하는 경우 NotifyAddrChange 호출은 동기적이며 IP 주소 변경이 발생할 때까지 차단됩니다. 이 경우 변경이 발생하면 NotifyAddrChange 함수가 완료되어 변경이 발생했음을 나타냅니다.

NotifyAddrChange 함수가 동기적으로 호출되면 애플리케이션이 종료될 때까지 다음 IPv4 주소 변경 시 알림이 전송됩니다.

호출자가 핸들 변수 및 OVERLAPPED 구조를 지정하는 경우 NotifyAddrChange 함수 호출은 비동기적이며 호출자는 반환된 핸들을 OVERLAPPED 구조와 함께 사용하여 GetOverlappedResult 함수를 사용하여 IPv4 주소 변경에 대한 비동기 알림을 받을 수 있습니다. 핸들 및 OVERLAPPED 구조를 사용하여 알림을 받는 방법에 대한 자세한 내용은 다음 topics 참조하세요.

CancelIPChangeNotify 함수는 IPv4 주소 알림을 취소하고 NotifyAddrChange 또는 NotifyRouteChange 함수를 성공적으로 호출하여 이전에 요청된 변경 내용을 라우팅합니다.

애플리케이션에 변경 알림이 표시되면 애플리케이션은 GetIpAddrTable 또는 GetAdaptersAddresses 함수를 호출하여 IPv4 주소 테이블을 검색하여 변경된 내용을 확인할 수 있습니다. 애플리케이션에 알림을 받고 다음 변경에 대한 알림이 필요한 경우 NotifyAddrChange 함수를 다시 호출해야 합니다.

NotifyAddrChange 함수를 비동기적으로 호출하면 애플리케이션이 CancelIPChangeNotify 함수를 호출하여 알림을 취소하거나 애플리케이션이 종료될 때까지 다음 IPv4 주소 변경 시 알림이 전송됩니다. 애플리케이션이 종료되면 시스템에서 알림 등록을 자동으로 취소합니다. 애플리케이션이 종료되기 전에 알림을 명시적으로 취소하는 것이 좋습니다.

알림에 대한 등록은 시스템 종료 또는 다시 부팅에서 유지되지 않습니다.

Windows Vista 이상에서는 NotifyIpInterfaceChange 함수를 사용하여 로컬 컴퓨터의 IPv4 및 IPv6 인터페이스 변경에 대한 알림을 받도록 등록할 수 있습니다.

예제

다음 예제에서는 IP 주소를 인터페이스에 매핑하는 테이블에서 변경이 발생할 때까지 기다립니다.

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <windows.h>

#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")

void main()
{
  OVERLAPPED overlap;
  DWORD ret;
    
  HANDLE hand = NULL;
  overlap.hEvent = WSACreateEvent();

  ret = NotifyAddrChange(&hand, &overlap);

  if (ret != NO_ERROR)
  {
    if (WSAGetLastError() != WSA_IO_PENDING)
    {
      printf("NotifyAddrChange error...%d\n", WSAGetLastError());            
      return;
    }
  }

  if ( WaitForSingleObject(overlap.hEvent, INFINITE) == WAIT_OBJECT_0 )
    printf("IP Address table changed..\n");
}

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 iphlpapi.h
라이브러리 Iphlpapi.lib
DLL Iphlpapi.dll

참고 항목

CancelIPChangeNotify

GetAdaptersAddresses

GetIpAddrTable

GetOverlappedResult

IP 도우미 함수 참조

NotifyIpInterfaceChange

NotifyRouteChange

OVERLAPPED