errno 101
在 Linux 系统中表示 "Network is unreachable"(网络不可达)。这个错误通常意味着你的程序尝试进行网络通信时,无法找到目标主机或者网络路径不可用。以下是关于这个错误的基础概念、可能的原因以及解决方法:
ifconfig
或 ip addr
查看网络接口配置。route
或 ip route
查看路由表。nslookup
或 dig
命令检查域名是否能正确解析为 IP 地址。iptables
或 firewall-cmd
(对于 firewalld)查看当前的防火墙规则。traceroute
或 mtr
工具追踪数据包到目标的路径,查找可能的故障点。如果你在使用 C 语言进行网络编程时遇到此错误,可以通过以下方式捕获和处理:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
int sockfd;
struct sockaddr_in serv_addr;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(8080);
// Convert IPv4 and IPv6 addresses from text to binary form
if (inet_pton(AF_INET, "192.168.1.1", &serv_addr.sin_addr) <= 0) {
perror("inet_pton failed");
close(sockfd);
exit(EXIT_FAILURE);
}
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
if (errno == ENETUNREACH) {
fprintf(stderr, "Error: Network is unreachable\n");
} else {
perror("connect failed");
}
close(sockfd);
exit(EXIT_FAILURE);
}
printf("Connected successfully\n");
close(sockfd);
return 0;
}
在这个示例中,如果连接失败并且错误码是 ENETUNREACH
,程序会打印出特定的错误信息。这样的处理可以帮助开发者更快地定位问题所在。
领取专属 10元无门槛券
手把手带您无忧上云