Re: Keep-Alive
От: Pzz Россия https://github.com/alexpevzner
Дата: 28.08.23 18:22
Оценка:
Здравствуйте, Tessi, Вы писали:


T>Я хочу сделать в своем клиенском приложении поддержку keep-alive (знаю, что сервер опцию поддерживает).

T>Я выставляю сокету опцию SO_KEEPALIVE. При этом сервер видит это и не закрывает соединение.

У тебя протокол какой. Я понимаю, что TCP, а выше TCP — что?

T>Вопрос — кроме выставление флага SO_KEEPALIVE, нужно ли держать сокет открытым (не делать closesocket)?

T>Но в этом случае непонятно, зачем нужен SO_KEEPALIVE, ведь сервер и так видит, что клиент не отсоединился и может ждать новых запросов.

SO_KEEPALIVE нужен, чтобы если соединение формально открыто, но фактически никакие данные по нему долгое время не ходят, и если вдруг соединение по каким-то причинам сломается (ну, например, пришла мышка, перегрызла кабель), то обе стороны в конечном итоге заметили потерю соединения и закрыли его. Ну там, для порядку и экономии ресурсов.

Только вот TCP keep-alive плохо справляется с этой задачей. И толку от него не очень-то много.

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