Comments (3)
多谢,应该是!=,你可以提交一个PR修复
from 30daymakecppserver.
你好,我仿照你的教程写了自己的版本,修复了这个问题( == 改成了 != )。但似乎存在另外一个问题。看这个析构函数,这个 socket 是应该及时回收的。
然后我查阅了下面这一段代码
30dayMakeCppServer/code/day06/src/Server.cpp
Lines 54 to 60 in aa16da2
根据我的理解,这段代码没有回收 socket 的空间,却也没有维护 socket 指针,似乎必然存在内存泄露。 我尝试在自己的版本中使用了智能指针。
// excerpt
auto clientSocket = std::make_shared<Socket>(serverSock->Accept( /* omit */ ));
程序在处理事件时,正确地释放了 clientSocket
的内存,但相应地造成自动关闭了客户端连接,移除了epoll 对 serverSock->Accept()
返回的 socket 连接的监听。
我自己的临时解决方案是在类中设置了一个属性
bool autoRelease_
来控制是否自动关闭连接。
我有些疑惑,这些 socket 对象是作为临时对象存在吗,是否有维护起来的必要呢?
from 30daymakecppserver.
所有客户端Socket都不是临时对象,需要由Connection类维护、管理生命周期,在day08的教程里会处理。另外day13后的版本不会有任何内存泄漏问题,前面的代码重点放在架构上,忽略了一些细节。
from 30daymakecppserver.
Related Issues (20)
- day09 的 client.cpp 文件
- day10 中为什么要在 Acceptor.h 中引入头文件 <cstdio> ?
- 关于Acceptor的一个疑问 HOT 1
- 剩下的14天~~~
- 很有帮助,催更一下 HOT 3
- code16 如何编译,我用的是ubuntu,编译一堆问题
- 催更一下辛苦老哥啦~
- 域名过期
- errno:11 HOT 1
- day01-从一个最简单的socket开始:IPPROTO_UDP误写为IPPTOTO_UDP
- day06 的src/Server.cpp 文件缺少头文件 HOT 1
- day03中的server.cpp
- What's going on
- day16:当echo客户端断开连接时,服务器会发生Segmentation fault
- 催更
- day13的笔误 HOT 1
- 交流 HOT 1
- day08的Acceptor类和Connection类的事件处理逻辑放置问题
- day11线程池add函数返回了使用期约
- day08 Connection类的销毁问题
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from 30daymakecppserver.