482
482
if ( domainT == "" ) return false;
483
483
if ( portT < 1 || portT > 65536 ) return false;
485
domainT = domainT.substr(0, 250);
485
int domlen = domainT.length();
487
if (domlen > 250) domainT = domainT.substr(0, 250);
486
488
my_s_addr.sin_port = htons(portT);
489
if ( inet_aton( domainT.c_str(), &ip_addr ) != 0 )
491
if ( domlen >= 7 && domlen <= 15 && domainT.find_first_not_of("0123456789.") == string::npos )
491
my_s_addr.sin_addr = ip_addr;
494
if ( inet_aton( domainT.c_str(), &my_s_addr.sin_addr ) != 0 ) return true;
495
498
//Same host as last time, use next IP
496
else if ( LastHost == domainT )
499
if ( server && LastHost == domainT )
501
if ( ips == 1 ) return true;
498
503
if ( ++ip_count == ips ) ip_count = 0;
500
memcpy(&my_s_addr.sin_addr, server->h_addr_list[ip_count], server->h_length);
504
memcpy((char *) &my_s_addr.sin_addr.s_addr, server->h_addr_list[ip_count], server->h_length);
505
else if ( (server = gethostbyname( domainT.c_str() )) )
510
if ( (server = gethostbyname( domainT.c_str() )) )
508
for ( ips = 0; server->h_addr_list[ips] != NULL && ips != 16; ips++ );
513
for ( ips = 0; server->h_addr_list[ips] != NULL && server->h_addrtype == AF_INET && ips != 16; ips++ );
510
515
if ( !ips ) return false;
512
memcpy(&my_s_addr.sin_addr, server->h_addr_list[0], server->h_length);
517
memcpy((char *) &my_s_addr.sin_addr.s_addr, server->h_addr_list[0], server->h_length);
515
520
LastHost = domainT;