Qt笔记-解决QSocketNotifier: Multiple socket notifiers for same socket xxx and type Read问题

Posted IT1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt笔记-解决QSocketNotifier: Multiple socket notifiers for same socket xxx and type Read问题相关的知识,希望对你有一定的参考价值。

Qt中的socket有个descriptor的概念,这个descriptor就代表socket。

报这个错误是因为,你程序里面2个socket都绑了同一个descriptor。所以出现了问题。

我的遇到的是这样的。

void QSSLServer::incomingConnection(qintptr socketDescriptor)
{
    QSslSocket *sslSocket = new QSslSocket(this);
    ......
    ......
    ......
    addPendingConnection(sslSocket);
}

addpending相关:

 这里如果用信号与槽就必须这样用

void QSSLServer::rx()
{
    QTcpSocket* clientSocket = qobject_cast<QTcpSocket*>(sender());
    .......
    .......
    //再发一条数据
    clientSocket->write("Hello Client");
}

而不能

QTcpSocket tcpSocket;
tcpSocket.setSocketDescriptor(num);

在多线程的服务端中不要再调用addPendingConnection,直接在此处调用连接池。在线程中直接进行TCP相关的操作。

以上是关于Qt笔记-解决QSocketNotifier: Multiple socket notifiers for same socket xxx and type Read问题的主要内容,如果未能解决你的问题,请参考以下文章

文件更改句柄,QSocketNotifier 由于无效套接字而禁用

Qt笔记-QTcpSocket跨线程调用(官方推荐方法,非百度烂大街方法)

Qt笔记-解决QSslSocket中QWaitCondition: Destroyed while threads are still waiting问题

QSocketNotifier 与 nanomsg

QSocketNotifier - 如何使用它来观看文件? - linux

QSocketNotifier 如何通知我管道已准备好读取?