AIRアプリからSocketにて通信しようとするときに、接続できない場合での一般的な例外がどのようなエラーとなるのかが、
よくわからないのでちょっと調べてみた。
ケース1)サーバが見つからないとき、もしくはそのサーバに接続できないとき
- 接続ができないとわかった段階で「IOErrorEvent」のイベントが発行される。
- Socket.timeoutたったあと「SecurityErrorEvent」のイベントが発行される。
ケース2)ポートが開いていないとき(サービスが上がっていないとき)
ケース1と同様
- 接続ができないとわかった段階で「IOErrorEvent」のイベントが発行される。
- Socket.timeoutたったあと「SecurityErrorEvent」のイベントが発行される。
ケース3)ポートがFirewall(iptablesで受け付けない)で拒否をされているとき。
- Socket.timeoutたったあと「SecurityErrorEvent」のイベントが発行される。
- 接続ができないとわかった段階で「IOErrorEvent」のイベントが発行される。
ここで、イベントの順番が今までと違ってきました
ケース4)ポート番号がおかしいとき、「90000」とか・・・
- 「SecurityError」の例外が投げられる。
- Socket.timeoutたったあと「SecurityErrorEvent」のイベントが発行される。
しかし、接続できなかったときには、どっちのイベントで捕まえればいいのかなと思っていましたが、
「SecurityErrorEvent」、「IOErrorEvent」も両方発行されるのですね。
ケース4のように命令としておかしくても、「SecurityErrorEvent」のイベントが発行されるようなので、
エラーはたいてい「SecurityErrorEvent」で処理をしておけば大丈夫ってことでしょう。
Socket.timeoutできちんと処理をあきらめたいということであれば、
なおさら、「SecurityErrorEvent」で処理をしたほうがいいということかな。


