Здравствуйте! Имеется следующий класс:
class QSslServer : public QTcpServer
{
Q_OBJECT
public:
explicit QSslServer(QObject *parent = 0);
virtual void incomingConnection( int socketDescriptor );
private:
QSslSocket *serverSocket;
signals:
public slots:
void socketReady();
void socketSslErrors(const QList<QSslError> &errors);
void socketError(QAbstractSocket::SocketError socketError);
};
Переопределённый метод incomingConnection:
void QSslServer::incomingConnection(int socketDescriptor)
{
serverSocket = new QSslSocket(this);
................
................
................
if (serverSocket->setSocketDescriptor(socketDescriptor))
{
bool result = QObject::connect(serverSocket, SIGNAL(encrypted()), this, SLOT(socketReady()));
result = QObject::connect(serverSocket, SIGNAL(sslErrors(const QList<QSslError> &)), this, SLOT(socketSslErrors(const QList<QSslError> &)));
result = QObject::connect(serverSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError)));
serverSocket->startServerEncryption();
}
else
{
delete serverSocket;
}
}
Далее есть класс, в котором работаем с объектом класса QSslServer:
class SslServer : public QObject
{
Q_OBJECT
public:
explicit SslServer(QObject *parent = 0);
..................
private:
QSslServer * sslServer;
..................
signals:
public slots:
void start();
void onNewConnection();
void onReadyRead();
};
В нём есть слот onNewConnection(), который соединён с сигналом newConnection()
QObject::connect( sslServer, SIGNAL( newConnection() ), this, SLOT( onNewConnection() ) );
void SslServer::onNewConnection()
{
if ( sslServer->hasPendingConnections() )
{
QTcpSocket * clientSocket = sslServer->nextPendingConnection();
QObject::connect(clientSocket, SIGNAL(disconnected()), clientSocket, SLOT(deleteLater()));
QObject::connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
}
}
При подключении клиента вызывается incomingConnection(), потом onNewConnection(), однако sslServer->hasPendingConnections() возвращает false. В общем то в этом и заключается проблема. Что я делаю не так?
При этом на сервере и на клиенте эмитятся сигналы encrypted().
Update: версия Qt - 4.6.2