Linux: socket创建之后 interface down 然后再up起来

linux如果一个raw socket 创建起来,然后手动down掉这个interface,然后接下来在up起来之后,socket发送数据会是什么错误?

错误类型概述

在 Linux 中,当 raw socket 创建后,手动将其关联的网络接口 down 掉再 up 起来,发送数据时最常见的错误是 ENETDOWN (网络不可用) 或 ENETUNREACH (网络不可达)。

详细行为说明

  1. ENETDOWN (错误代码 100)
    发生时机:接口仍处于 down 状态,或内核认为接口不可用时
    错误信息:Network is down
    原因:socket 尝试通过已关闭的接口发送数据
  2. ENETUNREACH (错误代码 101)
    发生时机:接口重新 up 起来后,但路由表未正确恢复时
    错误信息:Network is unreachable
    原因:虽然接口已启动,但缺少必要的路由信息
  3. 可能继续工作的情况
    如果满足以下条件,socket 可能仍然正常工作:

Raw socket 未显式绑定到特定接口

接口 up 后完全恢复了 IP 地址和路由配置

使用的是 unbound raw socket(依赖内核自动路由选择)

验证方法

c 复制代码
// 示例代码片段
ssize_t result = sendto(raw_sock, buffer, len, 0, 
                        (struct sockaddr*)&dest, sizeof(dest));
if (result < 0) {
    if (errno == ENETDOWN) {
        printf("Error: Network interface is down\n");
    } else if (errno == ENETUNREACH) {
        printf("Error: Network is unreachable\n");
    }
    perror("sendto");
}

最佳实践建议

监控接口状态:使用 netlink socket 监听接口状态变化

重新绑定:接口恢复后重新绑定 socket

错误处理:实现重试机制处理临时网络故障

使用 SO_BINDTODEVICE:如果需要绑定到特定接口,明确使用此选项

相关推荐
qetfw30 分钟前
Debian Samba 与 OpenLDAP 统一认证配置
linux·debian
初願致夕霞39 分钟前
《为什么公网访问不了内网?正向代理、内网穿透与 NAT 打洞一次说清》
linux·网络·tcp/ip·智能路由器
天远Date Lab41 分钟前
零信任架构实战:基于天远普通维保查询构建自动化车辆收车评估网关
运维·人工智能·架构·自动化
高磊200542 分钟前
Kubernetes Pod 管理实战详解
linux·容器·kubernetes
喜欢吃燃面1 小时前
Linux网络编程深度解析:从Socket API到自定义协议设计
linux·网络·arm开发
流星白龙1 小时前
【Docker】9.Docker 镜像仓库实战
运维·docker·容器
张洛闻Eren1 小时前
云原生k8s【第六课】:K8s 访问控制
运维·docker·云原生·容器·kubernetes·k8s
苹果嘉尔121381 小时前
Linux系统编程——网络(TCP)
linux·运维·服务器
网安蟹佬霸1 小时前
区块链与智能合约安全实战:从Solidity审计到DeFi漏洞深度剖析
运维·前端·网络·安全·自动化·区块链·智能合约
昌原的儿子LEO2 小时前
Linux进程知识点总结
linux·服务器·c语言·数据库