最近在学习c++中tcp连接池的实现,一直有个问题困惑着我。那就是如何检测每个连接仍然可用,如果不可用就修复(重连)。
google到最多的内容是tcp keepalived。但是看了介绍感觉这个选项的主要意义在于如果对端出现意外可以把这个套接字标记为broken然后还可以防止长时间没有通信,链接被对端关闭的情况。
但是对于第一点对端出现意外可以把这个套接字标记为broken
,对于标记为broken不可用后,我如何得知这个结果呢?
希望可以指点一下,如果有比较好的源代码可以提供参考就更好了。谢谢!
池子用
epoll
ET模式做事件这一层吧,所有socket
设置TCP_KEEPALIVE
,当有socket
有EPOLLIN
事件的时候,调用ioctl(fd, FIONREAD, &length)
,如果length
为0
的话说明这个连接已经被对端关闭了,重新建立一个放到池子里就OK了。如果要我写的话,我的思路是这样的。