c++中tcp连接池的实现

最近在学习c++中tcp连接池的实现,一直有个问题困惑着我。那就是如何检测每个连接仍然可用,如果不可用就修复(重连)。
google到最多的内容是tcp keepalived。但是看了介绍感觉这个选项的主要意义在于如果对端出现意外可以把这个套接字标记为broken然后还可以防止长时间没有通信,链接被对端关闭的情况。
但是对于第一点对端出现意外可以把这个套接字标记为broken,对于标记为broken不可用后,我如何得知这个结果呢?
希望可以指点一下,如果有比较好的源代码可以提供参考就更好了。谢谢!

阅读 5.9k
1 个回答

池子用epoll ET模式做事件这一层吧,所有socket设置TCP_KEEPALIVE,当有socketEPOLLIN事件的时候,调用ioctl(fd, FIONREAD, &length),如果length0的话说明这个连接已经被对端关闭了,重新建立一个放到池子里就OK了。如果要我写的话,我的思路是这样的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题