Итак, у меня есть сервер TCP
, который ждет определенного порта для подключения клиентов.Boost :: ASIO: использование tcp :: socket на несколько потоков
Если есть одно соединение с клиентом, я создаю объект tcp::socket
с некоторыми asio::io_service
, а затем принимаю этот сокет. Пример:
void Gateway::server(boost::asio::io_service& io_service, unsigned short port) {
tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), port));
bool UARTToWiFiGatewayStarted = false;
for (;;) {
tcp::socket sock(io_service);
a.accept(sock);
std::thread(startWiFiToUARTSession, std::move(sock)).detach();
if(false == UARTToWiFiGatewayStarted) {
//std::thread(startUARTToWifiSession, std::move(sock2)).detach();
UARTToWiFiGatewayStarted = true;
}
}
}
Теперь я хочу использовать функциональные возможности этого сокета, по меньшей мере, двух потоков, один поток будет читать (блокировка) из гнезда (read_some(...)
), а другой поток должен писать (блокирование) данных с использованием, что разъем.
Я пытался построить два объекта tcp::socket
, используя тот же объект asio::io_service
, но это не сработает.
Любые идеи?
Что вы подразумеваете под «не будет работать»? – Xirema
«использовать функциональность этого сокета, по крайней мере, для двух потоков» - вы имеете в виду это же соединение с одним клиентом? –
Каждый объект 'tcp :: socket' должен ссылаться на дискретный родной сокет. Можете ли вы объяснить мотивацию желания использовать два объекта 'tcp :: socket' для одного TCP-соединения? –