AS3 AIR / FlashBuilder Как освободить сокет при выходе? - PullRequest
2 голосов
/ 06 сентября 2011

При выходе из отладчика и повторном запуске я часто получаю сообщение:

Error: Error #2002: Operation attempted on invalid socket.
    at flash.net::ServerSocket/internalBind()
    at flash.net::ServerSocket/bind()

Обычно мне нужно немного подождать, прежде чем я смогу перезапустить приложение без ошибки.

Какя могу избежать этого?

private function openConnection():void
    {
        _serverSocket = new ServerSocket();
        _serverSocket.addEventListener(ServerSocketConnectEvent.CONNECT, onConnect)
        _serverSocket.bind(888);
        _serverSocket.listen();
    }

    private function onConnect(e:ServerSocketConnectEvent):void
    {
        trace("Client is connected");
        _clientSocket = e.socket;
        _clientSocket.addEventListener(ProgressEvent.SOCKET_DATA, onData);
        _clientSocket.addEventListener(Event.CLOSE, onConnectionClosed);
    }

1 Ответ

0 голосов
/ 11 сентября 2011

Я не думаю, что вы можете избежать этого. Если ОС освобождает сокет после того, как AIR отпускает его, требуется некоторое время. В качестве обходного пути вы можете перехватить ошибку и использовать таймер для повторной привязки сокета каждые несколько секунд.

И приложениям AIR никогда не нужны файлы политики (если только код, открывающий сокет, не был загружен извне приложения).

...