@shienaの技術ブログ

DaydreamのInstant Previewが何かの拍子で動かなくなったのを直すまでの軌跡を残しておく。

結論

WindowsならHyper-Vを無効にするんだ!!!

症状

UnityのPlayボタンを押すとスマホ側でInstant Previewが起動するもののNot connected to editor表示のままでプレビューできない。

調査したもの

  • adb logcat

InstantPreviewConnectionタグのログで127.0.0.1:49838に対してソケットエラーが出ている。(ログは残ってなかった)


  • Windows側のadbログ
adb E 01-19 17:31:35 20180  5576 services.cpp:81] failed to connect to socket 'tcp:49838': cannot connect to 127.0.0.1:49838: 対象のコンピューターによって拒否されたため、接続できませんでした。 (10061)

%TMP%\adb.log にあるログを調べるとこっちもソケットエラーが出ている。


  • adb reverse --list
(reverse) tcp:49838 tcp:49838

ポートフォワードは設定されているので問題なさそう。


  • Windows Defender ファイアウォール

すべてオフにしても症状が変わらず。ポートフォワード先は127.0.0.1なので関係ないよね…


  • ポートを開いているプロセスを調べる

netstat -aon | findstr 49838の結果、何も出ない。ここでいよいよ原因が分からなくなってくる。


  • 動的ポートの範囲を調べる。

https://support.microsoft.com/ja-jp/help/929851/the-default-dynamic-port-range-for-tcp-ip-has-changed-in-windows-vista

この方法で調べたが49838は動的ポートの範囲に入っている。


  • 範囲外ポートを調べる

色々調べているとKB4074588の既知の問題にたどりついた。

https://support.microsoft.com/ja-jp/help/4074588/windows-10-update-kb4074588

最後のコマンドを実行すると49838を含んだ範囲が予約されている!!!

>netsh interface ipv4 show excludedportrange protocol=tcp  

プロトコル tcp ポート除外範囲  

開始ポート    終了ポート  
----------    --------  
     49705       49804  
     49805       49904  
     49905       50004  
     50005       50104  
     50164       50263  
     50264       50363  
     50563       50662  

* - 管理されている除外ポート。

しかし以下のコマンドを管理者で実行しても「アクセスが拒否されました」で削除できない。
今度はこのポートを掴んでいる犯人探しだ。

netsh int ipv4 delete excludedportrange protocol=tcp startport=49805 numberofports=100

  • 類似事例を探す

https://github.com/docker/for-win/issues/3171

同じ範囲のポートを使っているのはHyper-Vらしいので一旦、無効にするとInstantPreviewが復活した!
こんなの分からないよ…


  • Hyper-Vを復活させる
  1. Hyper-Vを無効にして再起動する
  2. 管理者のコマンドプロンプトから以下のコマンドでInstantPreviewのtcp/49838を範囲外ポートに追加する
    >netsh int ipv4 add excludedportrange protocol=tcp startport=49838 numberofports=1
    
  3. Hyper-Vを有効にして再起動する

この手順を踏むと以下のようにtcp/49838だけ別に確保されるのでHyper-Vと共有できる。

>netsh interface ipv4 show excludedportrange protocol=tcp  

プロトコル tcp ポート除外範囲  

開始ポート    終了ポート  
----------    --------  
     49687       49786  
     49838       49838     *  
     49839       49938  
     49939       50038  
     50039       50138  
     50139       50238  

* - 管理されている除外ポート。

このログへのコメント

コメントはありません