폼에 리스트 박스 하나 추가하고 테스트한다.
gethostbyaddr의 타임아웃 문제는 고려하지 않았다.

WSAData wsadata;

  if(WSAStartup (MAKEWORD(1,1), &wsadata) != 0 )
  {
    ShowMessage("에러");
  }
 
  char ip[16];
  in_addr addr;
  hostent *host = 0;
  String errorcode;
   
  for(int i=0;i<255;i++)
  {

    sprintf(ip,"211.178.64.%d",i);
    addr.S_un.S_addr =  inet_addr(ip);
    host = gethostbyaddr ( (char *)(&addr.S_un.S_addr),        sizeof(addr.S_un.S_addr),        AF_INET);       

    int error = WSAGetLastError(); 


    switch(error)
    {
      case  WSANOTINITIALISED :
        errorcode = "WSANOTINITIALISED";
        break;
      case         WSAENETDOWN :
        errorcode = "WSAENETDOWN";
        break;
      case  WSAHOST_NOT_FOUND :
        errorcode = "WSAHOST_NOT_FOUND";
        break;
      case  WSATRY_AGAIN        :
        errorcode = "WSATRY_AGAIN";
        break;
      case  WSANO_RECOVERY  :
        errorcode = "WSANO_RECOVERY";
        break;
      case  WSANO_DATA :
        errorcode = "WSANO_DATA";
        break;
      case  WSAEINPROGRESS :
        errorcode = "WSAEINPROGRESS";
        break;
      case  WSAEAFNOSUPPORT :
        errorcode = "WSAEAFNOSUPPORT";
        break;
      case  WSAEFAULT        :
        errorcode = "WSAEFAULT";
        break;   
    }

    if(host != NULL)
      ListBox1->Items->Add( host->h_name); 
    else
    {
      ListBox1->Items->Add(errorcode); 
    }   
   
  }

  String msg  = "테스트가 끝났습니다.";
  ShowMessage(msg);

Posted by Gu Youn
,