twisted.loseConnection不会立即丢失连接?

时间:2010-12-27 20:51:57

标签: networking tcp network-programming connection twisted

我有一台连接了几个客户端的服务器。当CTRL + C被击中时(也就是反应堆开始关闭),我想关闭所有连接,等待它们干净地关闭,然后停止。我通过连接客户端的传输并调用.loseConnection()来完成此操作。在本地连接的那些,他们立即断开连接。但是,在通过互联网连接的连接上,连接不会立即丢失。通信停止 - 并且关闭客户端程序甚至不再告诉服务器连接已经死亡,尽管它在调用.loseConnection()之前已经死亡 - 但是在我发送一些数据后几分钟之后连接不会被视为“丢失”来自服务器的心跳请求。

据我所知,如果连接中断,除非它尝试发送一些数据,否则服务器无法知道。但是,如果我特别要求关闭连接,为什么不立即关闭/断开连接?我打的是错误的功能吗?

1 个答案:

答案 0 :(得分:1)

loseConnection在关闭连接之前刷新写缓冲区。如果您不想等待这种情况发生,请让反应堆在此之前停止。它们将以这种方式关闭,其写入缓冲区中的任何未发送数据都将被丢弃。

还有一项建议是添加用于丢弃写缓冲区和断开连接的API,abortConnection