当gethostbyname
函数失败时,您可以通过编写一个简单的重试逻辑来处理这种情况
#include#include #include #include #include int main(int argc, char *argv[]) { if (argc != 2) { printf("Usage: %s \n", argv[0]); exit(1); } const char *domain_name = argv[1]; int max_retries = 5; int retry_interval = 2; // in seconds for (int i = 0; i < max_retries; i++) { struct hostent *host = gethostbyname(domain_name); if (host != NULL) { printf("Host name: %s\n", host->h_name); printf("IP address: %s\n", inet_ntoa(*((struct in_addr *)host->h_addr))); break; } else { printf("Error: %d - Unable to resolve hostname: %s\n", h_errno, domain_name); if (i < max_retries - 1) { printf("Retrying in %d seconds...\n", retry_interval); sleep(retry_interval); } else { printf("Max retries reached. Exiting.\n"); } } } return 0; }
在这个示例中,我们首先检查命令行参数是否正确。然后,我们使用一个for循环来实现重试逻辑。在每次尝试之间,我们使用sleep()
函数等待指定的重试间隔(以秒为单位)。如果在达到最大重试次数之前成功解析了主机名,则程序将输出主机名和IP地址并退出。如果达到最大重试次数,程序将输出错误消息并退出。