C сокеты - клиент продолжает чтение после закрытия файлового дескриптора на стороне сервера - PullRequest
0 голосов
/ 12 ноября 2018

Я собираюсь завершить научный проект, написанный на C: проект состоит из многопоточного сервера чата с использованием сокетов AF_UNIX, поэтому и клиент, и сервер работают на одном компьютере.

В итоге программа запускаетсяосновной поток, в котором происходит инициализация (структуры, данные, т.д.) и пул потоков, обслуживающих запросы клиентов.

Проблема возникает, когда клиент ожидает последнего из списка сообщений (свызов read () и для этого я подаю сигнал завершения на сервер, пока клиент все еще ждет (позвольте мне пояснить, это не нормальная последовательность событий, но она может произойти по какой-то причине), в этот момент сервервыполняет все процедуры закрытия, которые он должен делать, и после этого он завершается правильно.

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

Я пишу некоторые подробности, которые могут быть полезны для ответа: -Сервер (в основном потоке) использует функцию epoll для обнаружения новых соединений и новых запросов -Все обмен сообщениями происходит в потоках -Сообщение об успехе через readv и writev

Надеюсь, я был достаточно ясен, и я отвечу за все дальнейшие разъяснения.

Спасибо всем заранее

...