Я пытаюсь написать серверную программу, которая поддерживает один клиент, до сих пор и в течение нескольких дней, когда я пытался его разработать, я пришел к выводу, что мне нужны потоки. Причина такого решения заключалась в том, что я беру данные из сокета wifi, а затем обрабатываю его и, наконец, записываю в файл, время обработки медленное и, следовательно, мне нужен входной поток -> круговой буфер -> выходной шаблон потока с потребителем-производителем модель, которая довольно распространена в сетевом программировании.Многопоточный проект программирования сокетов Linux
Теперь ситуация осложняется, так как мне нужно управлять отключением клиента и повторным подключением. Я думал использовать pthread_exit() и очищать все семафоры, а затем инициализировать их каждый раз, когда один клиент повторно подключается.
Мой вопрос в том, что это эффективный подход, то есть каждый раз, убивая потоки и семафоры и создавая их. Есть ли лучшие решения.
Спасибо.
Как отредактировано Я использую простые флаги, чтобы сигнальные потоки останавливались и в конечном итоге соединялись. Он хорошо работает для двух соединений, третье связано с проблемами. Должен ли я задерживать при закрытии предыдущего сокета и нового сокета. – Haswell
Я закрываю все дескрипторы, прежде чем создавать новые сокеты fd для нового подключения. – Haswell
Разве вы не используете стандартные функции сокетов, такие как bind, listen, accept и т. Д.? Код, который вы вставили, не имеет большого смысла для меня. – rodolk