본문 바로가기

WIN

Detect Disconnecting Network

WINDOWS API중 NotifyAddrChange() API를 이용해서 특정이벤트에 대한 Lock을 걸어서 대기한다.

즉 쓰레드로 아래 루틴을 수행시켜야 한다.

 

ST_Void* SPK_HTTP_Interface::checkNetworkChanged(ST_Void* arg)
{
 while ( 1 )
 {
  OVERLAPPED overlap;
  memset(&overlap, 0x00, sizeof(OVERLAPPED));
  DWORD ret=0;
  HANDLE hand = NULL;
  overlap.hEvent = WSACreateEvent(); 
  ret = NotifyAddrChange(&hand, &overlap);

  if (ret != NO_ERROR)
  {
   if (WSAGetLastError() != WSA_IO_PENDING)
   {
    return 0;
   }
  } 

  if ( WaitForSingleObject(overlap.hEvent, INFINITE) == WAIT_OBJECT_0 )
  {  
   RD_NotifyNetworkChanged();
   return 0;
  }       
 } // end while

}