У меня есть приложение на сервере TCP, в котором при получении входящего соединения я принимаю соединение и добавляю дескриптор сокета в список.Серверу нужен список, чтобы он мог перебирать список и периодически отправлять данные всем подключенным клиентам.
Если какой-либо из клиентов закрывает соединение, соответствующий дескриптор сокета необходимо удалить из списка.
Я попытался добавить дескрипторы в poll (), чтобы я мог обнаружить любое закрытое соединениес может быть POLLHUP, но я не могу понять, как прервать опрос, чтобы динамически добавлять дескрипторы к его набору при каждом входящем новом соединении.
Серверу просто нужен список дескрипторов всех открытых соединений всякий раз, когда он хочетдля отправки данных.
Как мне поступить?Любые предложения?
РЕДАКТИРОВАТЬ: Вот что я сделал: я создал поток для каждого клиента и добавил его fd в опрос.Псевдокод на сервере:
sockfd = accept the conn.
pthread_create
// Inside the thread, add sockfd to poll
struct pollfd fds[1];
fds[0].fd = sockfd;
poll(fds, 1, 500000);
Check for POLLHUP returned event and see which client(fd) closed the connection.
Кажется, это опрашивает все дескрипторы, но моя проблема сейчас заключается в том, что когда я тестировал закрытие соединений с двумя клиентами ... только один из дескрипторов возвращает POLLHUP.