Networking 扭曲。断开连接不会立即断开连接吗?

Networking 扭曲。断开连接不会立即断开连接吗?,networking,tcp,network-programming,connection,twisted,Networking,Tcp,Network Programming,Connection,Twisted,我有一个服务器,有几个客户端连接到它。当按下CTRL+C时(即反应堆开始关闭),我想关闭所有连接,等待它们完全关闭,然后停止。我通过检查连接的客户端的传输并调用.loseConnection()来实现这一点。在本地连接的设备上,它们会立即断开连接。但是,在通过internet连接的设备上,连接不会立即丢失。通信停止-关闭客户端程序甚至不再告诉服务器连接已断开,尽管它在调用.loseConnection()之前已断开连接-但在我从服务器发送几次心跳请求几分钟后,连接才被视为“断开” 我知道,如果连

我有一个服务器,有几个客户端连接到它。当按下CTRL+C时(即反应堆开始关闭),我想关闭所有连接,等待它们完全关闭,然后停止。我通过检查连接的客户端的传输并调用
.loseConnection()
来实现这一点。在本地连接的设备上,它们会立即断开连接。但是,在通过internet连接的设备上,连接不会立即丢失。通信停止-关闭客户端程序甚至不再告诉服务器连接已断开,尽管它在调用
.loseConnection()
之前已断开连接-但在我从服务器发送几次心跳请求几分钟后,连接才被视为“断开”


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

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


还有一个建议是添加一个API,用于丢弃写缓冲区并断开连接。

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


还有人建议添加一个API来丢弃写缓冲区并断开连接。

我还不想关闭反应器,我只想中止连接。所以目前没有办法这样做?我以为你想关闭反应堆,因为你说的是Ctrl-C。对于反应堆没有关闭的情况,需要执行ABORT连接(或类似的操作)。您可能还可以找到一些使用私有/未记录方法的方法(如
transport.connectionLost
),但这些方法可能并不总是受支持。我不想关闭反应堆,我只想中止连接。所以目前没有办法这样做?我以为你想关闭反应堆,因为你说的是Ctrl-C。对于反应堆没有关闭的情况,需要执行ABORT连接(或类似的操作)。您可能还可以找到一些使用私有/未记录方法的方法(如
transport.connectionLost
),但这些方法可能并不总是受支持的。