Linux 内核 IPv4 和 IPv6 套接字创建:EPROTONOSUPPORT 和 ESOCKTNOSUPPORT 错误

Linux kernel IPv4 and IPv6 socket creation: EPROTONOSUPPORT and ESOCKTNOSUPPORT errors

我正在尝试了解 IPv4 socket and IPv6 socket Linux 内核实现。

两种方法 inet_create()inet6_create() 看起来很相似。 他们都可以 return 到用户 space EPROTONOSUPPORTESOCKTNOSUPPORT,我想知道在什么情况下会发生这种情况。

ESOCKTNOSUPPORT means that the socket type is not supported for the chosen protocol. For instance, you can't create a SOCK_SEQPACKET with IPPROTO_IP. According to the ip(7) man page, 只有 SOCK_STREAM, SOCK_DGRAMSOCK_RAW 是 ip 的有效套接字类型。

EPROTONOSUPPORT表示不支持所选的套接字协议。例如,如果您请求 AF_INET6 并且系统管理员已通过将模块列入黑名单来禁用 IPv6。