QTcpSocket::close()
被调用时会发生什么?
我知道它最终会关闭连接,但是Tcp套接字的内部缓冲区会发生什么?它会被清除吗?
这就是为什么我调用close()
时QTcpSocket::size()
返回0的原因吗?
从客户端接收到服务器数据后:
qDebug() << tcpSocket.size(); //170
tcpSocket.close();
qDebug () << tcpSocket.size(); //0
编辑: 根据这篇帖子,关闭套接字会自动刷新任何剩余的数据。由于我在客户端从服务器接收数据后关闭套接字,那么数据被刷新到哪里了呢?我还没有读取任何数据。
QAbstractSocket
文档中提到的内部缓冲区实际上是由操作系统创建的? - Quaxton HaleQAbstractSocket
会创建一个缓冲区。 - Quaxton HaleQTcpSocket
绝对会分配内部缓冲区。我找不到任何相关的文档。此外,调用QTcpSocket::disconnectFromHost()
不会发出close(2)
调用,可能是因为它仍在尝试从其内部缓冲区中写入数据。 - Cuadue