2014年9月11日木曜日

Unity - adb.exeの不具合

ちょっとUnity使用中に謎の問題が起きたので調査&メモ。


■問題点

Unity上でPlayしたときに以下のようなエラーがでて止まる。

Socket: connect failed, error: Operation has failed with error 0x2747: システムのバッファー領域が不足しているか、またはキューがいっぱいなため、ソケット操作を実行できませんでした。
(0)
connect failed




■環境

Windows7x64
Unity 4.5.2f1


■原因らしきもの

ポートが食いつぶされてる(?)様子。
問題発生直後 netstat でみると ループバックアドレス(127.0.0.1)で大量の TIME_WAIT が見える。

TCP   127.0.0.1:7201     マシン名:65324    TIME_WAIT
TCP   127.0.0.1:7201     マシン名:65326    TIME_WAIT
TCP   127.0.0.1:7201     マシン名:65327    TIME_WAIT




と、大量にポートを消費し尽くして枯渇後停止している様子。
この状態ではポートが枯渇しているのでWebブラウザも一切閲覧不能になる様子。

デバッグしているUnityのコード内ではTCP/IPは使用していない。もちろんループバックアドレスも。


■問題発生時の状況


問題発生時に TCP  127.0.0.1:7201 をつかんでいるプロセスを特定。

adb.exe だった (またキミか・・・・)。

一度この状態になると adb.exe を kill しても問題の状態は復旧しない。
Unityを終了させると復旧する。

なんともかんとも・・・。
心あたりとしては、しばらくまえに Android SDK を 20140702版にアップデートしたくらい。


少し情報を探してみるとありました → Android Open Source Project - Issue Tracker

そのものズバリが、
2014/8/19付け 「Issue 75016: so many port forwarded to 5037 after opening eclipse
さらに 2014/11/25付け で Issue 62784 を発見。

ポート番号は違いますが、Android実機をUSBに挿したままな点も同じなのでタブンこれに類する問題だと思われます。

■対策

修正コードはマージされた風に読めますが、まだ正式版に反映されていないのかもしれない。

とりあえず発生条件のひとつに「実機がUSB接続されている」というのがありそうなので、不要なときは極力抜いておくようにしてみます。

どうも adb.exe はいろいろ問題が起きますね・・・。


追記:やはり実機をUSBから抜いておけば発生しません。
とりあえずこれで回避運用。



0 件のコメント:

コメントを投稿