Сетевой сокет, Connect() занимает много времени в беспроводной или 3G?
Я использую raw сокет в беспроводной сети и 3G.
Сервер, к которому подключается клиент, работает круглосуточно, пока я тестирую,
но connect() реализован таким образом, что время ожидания увеличивается.
Проблема, с которой я сталкиваюсь, заключается в том, что connect() часто занимает много времени (более 5 секунд или 10 секунд) в беспроводной сети или 3G.
Для проводного подключения (которое находится в той же сети, что и тестируемое беспроводное соединение: проводной и беспроводной находятся за маршрутизатором дома), метод connect() завершается практически мгновенно.
Сервер, с которым я тестирую connect(), имеет задержку 4-5 мс от домашней сети.
И сервер не принимает никакого другого запроса на подключение, кроме моего (это просто тестовый сервер)
- Мой предыдущий опыт работы в сети был в проводной среде, и я очень удивлен.
Ожидается ли эта задержка вызова connect() для беспроводных сетей и 3G? - Будет ли лучше повторить попытку connect() много раз с коротким тайм-аутом или попробовать connect() один раз с долгим тайм-аутом? И как бы я оценил оптимальный тайм-аут / повтор, если я могу даже попытаться?
Сервер работает под управлением Linux(Debian), если это имеет значение. и API, которые я использую, являются bsd сокетами.
-- РЕДАКТИРОВАТЬ --
При дальнейшем тестировании с 3g медленное соединение происходит всякий раз, когда клиент подключается в первый раз.
Таким образом, когда клиент подключается в первый раз, это происходит медленно, если он отключается и подключается снова менее чем за определенную продолжительность (скажем, 1 мин), соединение завершается быстро.
Однако, если клиент отключается и повторяет попытку подключения после длительной паузы (10 минут), соединение снова становится медленным.
Я подозреваю, что это связано с "маршрутизацией в IP"..