Форум сайта python.su
Приветствую всех.
Столкнулся довольно давно с такой проблемой, долго думал и пробывал разные вещи но ничего толкового не придумал изза непонимания причины проблемы.
Суть проста.Есть клиент,есть сервер.Клиент подключается к серверу и ждёт данных и на основе полученных данных вызывает определённую функцию.По началу всё работает,но если данные не будут приходить гдето минут 5 и более то соединение застывает,netstat с обеих сторон говорит что они подключены друг к другу но вот данные уже не идут клиенту.Пробовал ставить keepalive с обеих и не с обеих сторон - не помогает.Тогда пришла другая идея.Сервер в отдельном потоке раз в 2 минуты шлёт несколько байт клиенту,получился эдакий пинг.Если таким образом пинговать то всё работает без проблем.Хотел бы у вас спросить почему такое происходит и есть ли более красивое решение?
p.s. серверная часть на ubuntu,клиентская на windows
Отредактировано randint_1_1 (Июнь 13, 2014 11:43:20)
Офлайн
Вопрос на SO 1-в-1 как ваш: http://stackoverflow.com/questions/12248132/how-to-change-tcp-keepalive-timer-using-python-script
Офлайн
GreyZmeemв том то и дело что пробовал ставить keepalive и на сервере и на клиенте - не помогает, помогает только ручной пинг в духе s.send('ping')
Вопрос на SO 1-в-1 как ваш: http://stackoverflow.com/questions/12248132/how-to-change-tcp-keepalive-timer-using-python-script
Отредактировано randint_1_1 (Июнь 15, 2014 05:13:59)
Офлайн
Может хоть код представите , там уж и будем разбираться , как клиент и как сервер взаимодействуют.
Офлайн
randint_1_1Не слышал про “keepalive” для сокетов, а вот ручной пинг - это норма. По настоящему нет никакого соединения, просто периодический приходят пакеты, при этом считается соединение есть, если пакет не приходит определенное время (timeout) то “создается” разрыв.
в том то и дело что пробовал ставить keepalive и на сервере и на клиенте - не помогает, помогает только ручной пинг в духе s.send('ping')
Офлайн
Почитал про keepalive, штука не плохая, похоже в винде и линухе коды (и названия) разные на это дело, в винде 0x8, в линухе 0x10
Офлайн