Don't leave stale sockets around; instead, have them delete themselves
once disconnected. Use a QPointer in Request to be able to check for
deletion before trying to access the socket.
while (server->hasPendingConnections()) {
QTcpSocket *socket = server->nextPendingConnection();
connect(socket, SIGNAL(readyRead()), this, SLOT(respond()));
while (server->hasPendingConnections()) {
QTcpSocket *socket = server->nextPendingConnection();
connect(socket, SIGNAL(readyRead()), this, SLOT(respond()));
+ connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
void Request::respondSuccess(const QString &user)
{
void Request::respondSuccess(const QString &user)
{
- QString data = query + " : USERID : Quassel : " + user + "\r\n";
-
- socket->write(data.toUtf8());
- socket->flush();
- socket->close();
+ if (socket) {
+ QString data = query + " : USERID : Quassel : " + user + "\r\n";
+ socket->write(data.toUtf8());
+ socket->flush();
+ socket->close();
+ }
}
void Request::respondError(const QString &error)
{
}
void Request::respondError(const QString &error)
{
- QString data = query + " : ERROR : " + error + "\r\n";
-
- socket->write(data.toUtf8());
- socket->flush();
- socket->close();
+ if (socket) {
+ QString data = query + " : ERROR : " + error + "\r\n";
+ socket->write(data.toUtf8());
+ socket->flush();
+ socket->close();
+ }
#include <QHash>
#include <QObject>
#include <QHash>
#include <QObject>
#include <QString>
#include <QTcpServer>
#include <QTcpSocket>
#include <QString>
#include <QTcpServer>
#include <QTcpSocket>
+ QPointer<QTcpSocket> socket;
uint16_t localPort;
QString query;
qint64 transactionId;
uint16_t localPort;
QString query;
qint64 transactionId;