Linux — как обнаружить TCP-клиент подключиться к серверу в стек переполнения

У меня есть клиент / сервер TCP, и я хочу обнаружить потерю соединения на стороне клиента; Поскольку у моего клиента есть несколько интерфейсов, и в то же время я подключился к серверу с одним из них, я хочу знать, как обнаружить потерю соединения на стороне клиента, чтобы я мог подключить свой tcp-клиент с другим интерфейсом к серверу, и если все они Я храню свои данные в текстовых файлах. Я гуглил это, и я уже видел, как жить, но это не то, что я хочу.

если это важно, мой проект в Linux и код на C ++.

0

Решение

Попробуйте прочитать из сокета. Когда сокет закрывается, чтение не будет выполнено, что даст вам простое обнаружение. Вы можете сделать это в выделенном потоке обнаружения, чтобы ваш основной поток не блокировался.

1

Другие решения

TCP-соединения предназначены для исправления ошибок и не критичны по времени. Это исправление ошибок включает в себя тайм-ауты сети.

Чтение и запись не будут завершаться ошибкой до тех пор, пока сокет не закроется, что может продолжаться не очень долго.

Единственный способ для клиента определить, истекло ли время ожидания для соединения, — это определить, что клиент не получил сообщений в течение определенного времени, и вручную закрыть сокет.

Вот для чего нужны сообщения Keep Alive.

1

Лучший способ, который я нашел, это проверить буфер, если буфер пуст, это означает, что ваш TCP-клиент успешно отправил пакет на TCP-сервер, и вы можете отправить следующий пакет; для проверки буфера вы можете использовать SIOCOUTQ; его очень легко использовать и показать, сколько данных у вас в буфере.

1
По вопросам рекламы [email protected]