當gethostbyname
函數失敗時,您可以通過編寫一個簡單的重試邏輯來處理這種情況
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include <netdb.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage: %s<domain_name>\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地址并退出。如果達到最大重試次數,程序將輸出錯誤消息并退出。