Открытие нескольких портов с использованием библиотек Boost Asio - PullRequest
3 голосов
/ 23 февраля 2012

Я новичок в библиотеках Boost Asio, мое требование - создать сервер, который должен асинхронно прослушивать 600 различных портов (связь по TCP).Может кто-нибудь предложить мне умный способ добиться этого с помощью Boost Asio.Я попытался использовать пример эхо-сервера, представленный в документации Boost Asio, но не смог понять, что такое boost :: asio :: io_service io_service;

using namespace std; // For atoi.
for(long port=50000;port<=50600;port++)
{
    server s(io_service, port);
    io_service.run();
}

Может кто-нибудь пролить свет на это?

Ответы [ 2 ]

5 голосов
/ 23 февраля 2012

io_service отвечает за обработку всех назначенных ему операций ввода-вывода;вам не нужно создавать отдельный для каждого порта.Для того, что вы пытаетесь сделать, вам нужно создать 600 отдельных экземпляров сервера, затем вызвать io_service.run().

vector<shared_ptr<server> > servers;
for (uint16_t port = 50000; port != 50600; ++port)
{
    servers.push_back(shared_ptr<server>(new server(io_service, port)));
}
io_service.run();
0 голосов
/ 23 февраля 2012

Попробуйте что-нибудь вроде этого

boost::asio::ip::tcp::socket socket(io_service);

socket.async_connect(endpoint, connectHandler);

Переменная socket является экземпляром одного сокета, и вызов async_connect устанавливает асинхронное соединение с местоположением, определенным endpoint. Вы можете выполнять асинхронное чтение и запись в socket аналогичным образом, просто убедитесь, что io_service.run() где-то выполняется в потоке, иначе асинхронные вызовы (и связанные обратные вызовы) не будут выполнены ...

...