Qt 菜鸟的坑 QAbstractSocket::isValid()

我曾经多次在 Qt socket 编程中使用 tcpSocket.isValid 来判断我当前的连接是否可用,最近写程序时才发现此法并不妥当。

    bool QAbstractSocket::isValid() const
    Returns true if the socket is valid and ready for use; otherwise returns false.
    

Note: The socket's state must be ConnectedState before reading and writing can occur.
    See also state().

     官方的帮助文档甚是模糊,说如果 socket 可用,或者已经准备好了被用返回 true,否则返回 false ,对于我个人的理解,socket 只有在正常的 connected 的状态才应该是 valid 的,但是我发现,比如我调用了 disconnectfromhost 去断开连接,disconnectfromhost 是会等待 socket 将未发送完的数据发送完毕之后才会真正的断开连接,此时 socket 的状态是正在断开ing...这时候 qt 认为 socket 依旧是 valid ,简直就是个火坑啊。

    避免被 valid 所坑害,判断 socket 的 state 是最佳的选择

    socket 有以上 6 种状态,但是哪些状态下是 valid 不知道。因此,根据你的需要来判断 state 吧。

原文地址:https://www.cnblogs.com/liushui-sky/p/6473872.html