У меня есть клиент / сервер TCP, и я хочу обнаружить потерю соединения на стороне клиента; Поскольку у моего клиента есть несколько интерфейсов, и в то же время я подключился к серверу с одним из них, я хочу знать, как обнаружить потерю соединения на стороне клиента, чтобы я мог подключить свой tcp-клиент с другим интерфейсом к серверу, и если все они Я храню свои данные в текстовых файлах. Я гуглил это, и я уже видел, как жить, но это не то, что я хочу.
если это важно, мой проект в Linux и код на C ++.
Попробуйте прочитать из сокета. Когда сокет закрывается, чтение не будет выполнено, что даст вам простое обнаружение. Вы можете сделать это в выделенном потоке обнаружения, чтобы ваш основной поток не блокировался.
TCP-соединения предназначены для исправления ошибок и не критичны по времени. Это исправление ошибок включает в себя тайм-ауты сети.
Чтение и запись не будут завершаться ошибкой до тех пор, пока сокет не закроется, что может продолжаться не очень долго.
Единственный способ для клиента определить, истекло ли время ожидания для соединения, — это определить, что клиент не получил сообщений в течение определенного времени, и вручную закрыть сокет.
Вот для чего нужны сообщения Keep Alive.
Лучший способ, который я нашел, это проверить буфер, если буфер пуст, это означает, что ваш TCP-клиент успешно отправил пакет на TCP-сервер, и вы можете отправить следующий пакет; для проверки буфера вы можете использовать SIOCOUTQ
; его очень легко использовать и показать, сколько данных у вас в буфере.