Использование boost :: asio для прослушивания двух сокетов - PullRequest
2 голосов
/ 21 декабря 2011

Как я могу слушать два сокета одновременно, используя boost :: asio? Я думаю, что не должно быть двух io_service. Должен ли я решить два запроса для двух акцепторов, чтобы прослушать два сокета? Предполагается, что два гнезда:

127.0.0.1:7001
127.0.0.2:7001

1 Ответ

4 голосов
/ 21 декабря 2011

Вы правильно используете один asio io_service. (Вам, конечно, разрешено использовать столько, сколько вы хотите, но более эффективно просто использовать один, так как он блокирует в потоке и вы избегаете ненужного переключения контекста. Кроме того, вы можете вызывать io_service::run из нескольких потоков, если хотите использовать несколько процессоров.)

Инкапсулируйте acceptor и socket в классе, как показано во многих примерах asio, и передайте io_service конструктору класса по ссылке. Затем вы можете bind принять получателя по желаемому адресу, listen и вызвать async_accept в методе класса, который вы вызываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...