Я пытаюсь подключиться к нескольким серверам одновременно с помощью библиотеки ускорения cpp. Я написал класс Socket, но по какой-то причине, когда у меня есть несколько экземпляров одного класса и пытаюсь подключиться, другой экземпляр также будет подключаться.увеличить несколько клиентских подключений
socket.h
class Socket{
private:
boost::asio::io_service io_service_;
#if USE_SSL
boost::asio::ssl::context context;
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> ssocket;
#else
tcp::socket ssocket;
#endif
int headerLength;
public:
Socket(int = HEADERLENGTH);
bool connect(std::string, std::string);
};
socket.cpp
#if USE_SSL
Socket::Socket(int h) : context(boost::asio::ssl::context::sslv23), ssocket(io_service_, context){
headerLength = h;
}
#else
Socket::Socket(int h) : ssocket(io_service_){
headerLength = h;
}
#endif
bool Socket::connect(std::string host, std::string port){
tcp::resolver resolver(io_service_);
tcp::resolver::query query(tcp::v4(), host.c_str(), port.c_str());
tcp::resolver::iterator iterator;
std::cout << "resolving " << host << "\n";
try {
iterator = resolver.resolve(query);
}
catch (...){
return false;
}
//ssocket.lowest_layer().set_option(tcp::no_delay(true));
std::cout << "connecting to " << host << "\n";
boost::system::error_code ec;
#if USE_SSL
try {
boost::asio::connect(ssocket.lowest_layer(), iterator, ec);
if (ec){ // throw error
return false;
}
}
catch (...){
return false;
}
//ssocket.set_verify_mode(boost::asio::ssl::verify_peer | boost::asio::ssl::verify_fail_if_no_peer_cert);
ssocket.set_verify_mode(boost::asio::ssl::context::verify_none);
ssocket.handshake(boost::asio::ssl::stream<tcp::socket>::client);
std::cout << "connected \n";
return true;
#else
boost::asio::connect(ssocket, iterator, ec);
return !ec;
#endif
}
Я чувствую, как это приходится делать что-то с тем, как конструктор называется, но AFAIK не являются ни контекст, ни ssocket статические переменные, или я не прав? USE_SSL - 1. Буду признателен за вашу помощь.