У нас есть приложение Java, работающее на JBed JVM на Windows Mobile 6.1.
При потере подключения приложению требуется много времени (8–10 минут) для восстановления подключения к сети VPN, несмотря на тот факт, что другие приложения могут видеть VPN гораздо раньше (примерно 2–3 минуты).
Из журналов нашего приложения видно, что два сетевых вызова (каждый не зависит от другого) - один для установления IP-адреса устройства в VPN (InetAddress local = InetAddress.getLocalHost), один для открытия сокета (соединение = новый сокет (IP-адрес хоста, порта);) многократно происходит сбой в течение периода, когда соединение полностью отсутствует, и после восстановления соединения с другими приложениями, но оба вызова, похоже, восстанавливают доступ к сети одновременно (первая успешная попытка открыть сокет происходит при первой попытке получить успешный IP-адрес).
Некоторые другие вещи, которые мы узнали / знаем:
1) IP-адрес устройства не используется при открытии сокета - это отдельные подпрограммы, работающие в отдельных потоках. Мне кажется, что отказ одного не вызывает другого, скорее, оба они преуспевают / терпят неудачу по одной и той же основной причине.
2) Звонок для установки IP-адреса не прерывается в течение этого периода, он просто не видит VPN-соединение - IP-адрес соединения сотовой сети виден. Когда я ссылаюсь на успех / неудачу, это не исключение, а то, что он видит сетевое соединение в нужном диапазоне IP-адресов.
3) Если вы завершаете процесс и перезапускаете приложение, оно подключается нормально, но при запуске не запускается никакого реального кода, который мог бы это объяснить - только те же два вызова.
4) При попытке открыть сокет для подключения используется IP-адрес сервера (в отличие от имени, которое необходимо будет разрешить).
5) Что-то, называемое Checkpoint, используется для управления сетевым подключением - не знаю, может ли это способствовать.
Я думаю, что на уровне JVM может происходить какое-то кэширование / пул, вызывающий это.
Есть ли у кого-нибудь мысли о том, что может способствовать этому, и что-нибудь, что мы могли бы попытаться предотвратить?
Да, и это Java 1.2.