Linux 的 Windows 子系统上的 SSH 中的这个错误是什么?setsockopt IPV6_TCLASS 16:不允许操作

don*_*nut 17 ssh windows-subsystem-for-linux

我正在使用适用于 Linux 的 Windows 子系统。当我使用 SSH 登录到我的家庭服务器时,我首先收到以下错误

setsockopt IPV6_TCLASS 16: Operation not permitted:
Run Code Online (Sandbox Code Playgroud)

然后一切都按预期工作:

Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-77-generic x86_64)
etc
Run Code Online (Sandbox Code Playgroud)

据我所知,setsockopt 是一个......用于更改套接字选项的东西(它不是一个可运行的命令),但我不知道是谁或为什么。

我最感兴趣的是这个错误是什么以及它为什么会弹出,并且由于一切仍然有效,对如何修复它不太感兴趣(除非它是一件可怕的大事),尽管知道这也很高兴。

FWIW 这是一个新安装的服务器,我正在使用 SSH 密钥。WSL Ubuntu 版本:16.04.2 LTS。Windows 版本:1703,内部版本号:15063.296。

Tho*_*est 16

setsockopt 是 Linux syscall- 从用户空间应用程序发送到 Linux 内核的命令。setsockopt 是一个非常通用的,用于在所有类型的套接字上设置各种选项。在您的情况下,它很可能是用于解析名称 (DNS) 的 udp 连接或与您的家庭服务器 (SSH) 的 tcp 连接的描述符。

IPV6_TCLASS 用于设置 IPV6 流量类,它失败的原因是 Windows 或 WSL 不支持该操作或需要您没有的特殊权限(不允许操作的文本来自标准库中的 ENOPERM 错误,虽然它是关于权限的,但 WSL 出于其他原因返回它以保持应用程序兼容性并非不可能)。

您可以放心地忽略此错误,这意味着某些网络连接可能没有使用应用程序所需的流量类别,无论如何这不太可能给您带来任何问题。

如果您想更多地了解 WSL 如何在幕后工作,有一个很棒的视频系列,随附的博客文章涵盖了 WSL 的各个方面(向下滚动视频的博客文章):

  1. 适用于 Linux 的 Windows 子系统:架构概述
  2. 适用于 Linux 的 Windows 子系统:进程架构
  3. 适用于 Linux 的 Windows 子系统:WSL 系统调用
  4. 适用于 Linux 的 Windows 子系统:WSL 文件系统支持
  5. Windows 和 Ubuntu 互操作性
  6. WSL网络