问题描述
我正在创建一个小型 C++ 服务器,它应该像这样在无限循环中处理请求。
void Server::start_accept_loop(int server,SSL_CTX* ctx){
sockaddr_in incoming_addr;
socklen_t len = sizeof(incoming_addr);
int client_sock;
SSL* ssl;
while(Server::is_accepting){
client_sock = accept(server,(sockaddr*)&incoming_addr,len);
ssl = SSL_new(ctx);
SSL_set_fd(ssl,client_sock);
if (SSL_accept(ssl) == -1){
printf("Unable to accept ssl connection\n");
}else{
std::shared_ptr<Client> client (new Client(ssl));
std::thread th (background_client,client);
}
}
}
void Server::background_client(std::shared_ptr<Client> client_ptr){
std::shared_ptr<Client> client = client_ptr;
int request = 0;
request = client->get_request();
...
}
其实我有几个问题。
- 当创建的客户端 shared_ptr 在线程创建后超出范围时,它会减少引用计数并释放对象。它是新线程的竞争条件,或者是在
std::thread th (background_client,client);
行增加的引用计数。基本上,我想知道是否需要在 while 循环超出范围并创建新的 shared_ptr 之前等待一段时间,或者引用计数是否立即增加? - 我的第二个问题是关于 SSL 结构指针的。如果底层的client_sock 和incoming_addr 对象在没有在堆上动态创建的情况下超出范围,那么可能依赖于这些的SSL 连接是否存在问题,或者SSL 指针是否包含所有这些信息的符合动态副本?立>
- 还有什么我应该知道的吗?
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)