На работе мне поручили реализовать TCP-сервер как часть ведомого устройства Modbus. Я сделал много читал как здесь, по обмену стеками, так и в Интернете в целом (включая отличный http://beej.us/guide/bgnet/), но я борюсь с проблемой дизайна. устройство может принимать только 2 соединения, и на каждое соединение будут входящие запросы Modbus, которые я должен обработать в своем основном цикле контроллера, а затем ответить статусом успеха или неудачи.У меня есть следующие идеи, как это реализовать.
Есть слушатель поток, который создает, связывает, прослушивает и принимает соединения, а затем порождает новый pthread для прослушивания соединения на наличие входящих данных и закрытия соединения после периода простоя.Если количество активных потоков в настоящее время равно 2, новые соединения мгновенно закрываются, чтобы гарантировать допускается только 2.
Не создавайте новые потоки из потока прослушивателя, вместо этого используйте select() для обнаружения входящих запросов на подключение, а также входящих подключений Modbus для активных подключений (аналогично подходу в руководстве Beejs).
Я давно использую C++, но я новичок в разработке под Linux. Я был бы очень рад любым предложениям относительно того, какой из вышеперечисленных подходов лучше (если таковые имеются), и если мой неопытный с Linux означает, что любой из них действительно очень плохие идеи. Я стараюсь избегать fork() и придерживаться pthreads, так как входящие запросы Modbus будут ставиться в очередь и периодически считываться из основного цикла контроллера. Спасибо заранее за любые советы.