■問題点
Unity上でPlayしたときに以下のようなエラーがでて止まる。Socket: connect failed, error: Operation has failed with error 0x2747: システムのバッファー領域が不足しているか、またはキューがいっぱいなため、ソケット操作を実行できませんでした。
(0)
connect failed
■環境
Windows7x64Unity 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 件のコメント:
コメントを投稿