in_addr getbcastaddr(){
  DWORD   dwBytesReturned   =   0;   
  struct   sockaddr_in   saTarget;   
  struct   sockaddr_in   saSource;   
  in_addr reterr;
  reterr.s_addr = INADDR_ANY;
  memset(&saSource,   0,   sizeof(sockaddr_in));   
  memset(&saTarget,   0,   sizeof(sockaddr_in));     SOCKET   hSocket   =   socket(AF_INET, SOCK_DGRAM, 0);    
  int nVal = 1;  
  int nRet = setsockopt (hSocket, SOL_SOCKET, SO_BROADCAST, (char*)&nVal, sizeof(nVal));    saTarget.sin_family   =   saSource.sin_family   =   AF_INET;   
  saTarget.sin_addr.s_addr   =   inet_addr("255.255.255.255");   
  if(0 != WSAIoctl(hSocket,   SIO_ROUTING_INTERFACE_QUERY,   (LPVOID)&saTarget, sizeof(sockaddr_in),   (LPVOID)&saSource,   sizeof(sockaddr_in), &dwBytesReturned,   NULL,   NULL))
     return reterr;   
  closesocket(hSocket);   
  return saSource.sin_addr;
}
-------------------------------------------------------------------
in_addr getthuaddr(){
  unsigned long ipmask[3];
  ipmask[0] = inet_addr("59.66.0.0");
  ipmask[1] = inet_addr("166.111.0.0");
  ipmask[2] = inet_addr("162.105.0.0");
  in_addr temp;
  temp.s_addr = INADDR_ANY;  char LocalName[255];
  struct hostent *pHost;
  gethostname(LocalName,sizeof(LocalName)-1);
  pHost = gethostbyname((char *)LocalName);
  for ( int i=0; ; i++ ) 
  { 
memcpy(&temp,pHost->h_addr_list[i],pHost->h_length);
myiplist.insert(temp.S_un.S_addr);
for(int j = 0; j < 3; j++)
if((ipmask[j] & temp.s_addr) == ipmask[j]) 
return temp;
if ( pHost->h_addr_list[i] + pHost->h_length >= pHost->h_name ) 
break; 
  } 
  return temp;
}1、帮忙解释下setsockopt()和 WSAIoctl()这2个函数执行的结果是什么。
2、 pHost->h_addr_list[i] + pHost->h_length >= pHost->h_name 是什么意思。
3、这2个函数最后的返回值是什么。表示的是什么意思。