kledgeb UbuntuやLinuxの最新情報を紹介

WSL その132 - WindowsとWSL間でUNIXソケットを利用した通信が可能に

WindowsとWSL間でUNIXソケットを利用した通信が可能に

2018年2月7日にリリースされた「Build 17093」では、「Windows」のソフトウェアと「WSL」上で動作する「Linux」のソフトウェア間で、UNIXソケット(UNIXドメインソケット/AF_UNIX)を利用した通信が行えるようになりました。


  • Windows/WSL Interop with AF_UNIX

以前リリースされた「Build 17063」において、「Windows」上でUNIXソケットを利用できるようになりました。

  • UNIXソケット(AF_UNIX)を利用し、Win32プロセス間でプロセス間通信が可能に

この機能のサポートを「WSL」に拡大し、「Windows」と「WSL」間の相互運用性が改善されました。

例えば「Linux」のソフトウェアは、UNIXソケットを利用して「Windows」のソフトウェアやサービスと通信し、相互にデータをやりとりすることができます。
また「Windows」と「Linux」の双方から通信可能なソフトウェアを開発することも可能です。

UNIXソケットに関する制限

現在以下のUNIXソケットに関する制限があります。

1.UNIXソケットと通信できるクライアントの種類

「WSL」のUNIXソケットは、「Win32」のUNIXソケットと「WSL」のUNIXソケットとのみ通信することができます。

しかし両方と同時に通信することはできません。
「WSL」のUNIXソケットサーバーは、「Win32」のUNIXソケットと「WSL」のUNIXソケットのいずれかからのみ、接続を受け入れることができます。

接続可能なクライアントの種類は、UNIXソケットのパスにより異なります。
UNIXソケットのパスは、「bind」や「connect」に指定するパスのことです。

UNIXソケットのパスがDrvFS内にある

UNIXソケットのパスが「DrvFS」内(/mnt/cなど)にある場合、そのUNIXソケットは「Windows」のUNIXソケットとのみ通信可能です。

UNIXソケットのパスがVolFs内にある

一方UNIXソケットが「VolFs(LxFS)」内(/tmpなど)にある場合、そのUNIXソケットは「WSL」のUNIXソケットとのみ通信可能です。

2.WSLのUNIXソケットがWindowsのUNIXソケットと接続する場合

「WSL」のUNIXソケットが「Windows」のUNIXソケットと接続する場合、UNIXソケットを作成した後の最初のUNIXソケットに対する操作は、「bind」もしくは「connect」でなければなりません。

それ以外の操作を行うと、その「WSL」のUNIXソケットは、「WSL」のUNIXソケットとのみ通信可能なUNIXソケットになります。

3.補助データの非サポート

「Windows」のUNIXソケットは、「SCM_RIGHTS」とった補助データをサポートしていません。
そのため「Windows」と「WSL」間の通信においても、補助データをサポートしていません。

パーミッションについて

UNIXソケットに対して「bind」や「connect」を行う際、そのパスに対して適切なパーミッションが設定されている必要があります。

特に「Windows」と「WSL」間でUNIXソケットによる通信を行う場合は、「Windows」及び「Linux」から見てアクセス可能なパーミッションが設定されている必要があります。
つまりそのUNIXソケットは、「Windows」と「Linux」のパーミッションが同時に適用されることになります。

サンプルコード

UNIXソケットを提供するWindowsアプリ(サーバー)と、そのUNIXソケットに接続するLinuxアプリ(クライアント)のサンプルコードです。
シンプルなサンプルであり、見れば分かるコードかと思います。

補足

事前に「DrvFs」のメタデータを有効にしてから、サンプルを試してみてください。
「DrvFs」のメタデータサポートを有効にする方法は、以下を参照してください。

  • DrvFs内のファイルにLinuxの所有者やパーミッションを設定可能に・スペシャルファイルを作成可能に

そうすればパーミッションの違いによる挙動を確認できます。

Windowsアプリ(サーバー)

  • Virtualization-Documentation/wsl-samples/afunix-wsl-interop/windows_server/


Linuxアプリ(クライアント)

  • Virtualization-Documentation/wsl-samples/afunix-wsl-interop/linux/


「Windows」と「Linux」では、ソケットへのパス(ファイルへのパス)の指定方法が異なる点に注意ください。

WSL
スポンサー
コメント
コメントポリシー
コメントをする前に UbuntuのCode of Conduct(CoC/行動規範) を確認し、CoCに沿ったコメントをお願いします。
コメントの使い方は、コメントの使い方を参照してください。
同一カテゴリーの記事
SNS
人気の記事
  • Ubuntu 22.04 その120 - UbuntuのブートローダーをBoot Repairで修復するには・Ubuntuが起動しないトラブルを解決
    UbuntuのブートローダーをBoot Repairで修復するには 「Boot Repair」はOSのブートローダーに起因するOSが起動しない問題を簡単に解決してくれるアプリです。
  • Ubuntu 24.04 その70 - Ubuntu 24.04.4 LTS のリリーススケジュール
    Ubuntu 24.04.4 LTS のリリーススケジュール Ubuntu 24.04.4 LTS のリリーススケジュールを紹介します。
  • Ubuntu 22.04 その95 - ディスプレイサーバーを切り替えるには・XorgとWayland
    ディスプレイサーバーを切り替えるには 「Ubuntu」はデフォルトで2種類のディスプレイサーバーを提供しています。
  • Ubuntu 22.04 その79 - 画面ロックの有効・無効を設定するには・画面ロック時の設定をカスタマイズするには
    画面ロックの有効・無効を設定するには 一定時間ユーザーによる操作がない時に、自動的に画面をロックしパスワードで保護したり、画面をブランク状態にできます。
  • Ubuntu 26.04 その9 - Ubuntu Desktop 26.04 LTS の開発方針・プリインストールアプリの変更やソフトウェア管理の一元化など
    Ubuntu Desktop 26.04 LTS の開発方針 2025年11月26日、Ubuntu Desktop 26.04 LTS の開発方針がアナウンスされました。
  • VirtualBox その125 - ゲストOSのUbuntuにLinux Guest Additionsをインストールするには
    ゲストOSのUbuntuにLinux Guest Additionsをインストールするには 仮想マシンにインストールしたゲストOSの「Ubuntu」に、「Linux Guest Additions」をインストールする方法です。
  • Ubuntu nano その5 - 文字列を検索する
    文字列を検索する(Where Is)   文字列の検索は、部分一致と正規表現による検索が可能です。 検索の開始始点   現在カーソルのある位置から検索を行います。   もし、テキストの最後まで検索して文字が見つからない場合、   nanoはテキストの先頭から検索...
  • Ubuntu 22.04 その98 - 入力ソースとキーボートレイアウトと日本語入力のカスタマイズ
    入力ソースとキーボートレイアウトと日本語入力 「Ubuntu」ではユーザーが利用しているキーボードレイアウトや日本語入力のカスタマイズが可能です。
  • Ubuntu 22.04 その99 - 日本語入力(Mozc)の設定をカスタマイズして作業効率を上げよう
    日本語入力(Mozc)の設定をカスタマイズするには 「Ubuntu」では日本語入力に「Mozc」を採用しています。
  • Ubuntu 22.04 LTSのインストール その5 - UEFI環境でパーティションの作成と構成 〜 ブートローダーのインストール先の選択
    UEFI環境でパーティションの作成と構成を行う UEFI環境でパーティションの作成と構成を行います。
記事のピックアップ
オプション