2013-11-28 8 views
0

Я разрабатываю приложение, которое имеет смысл, что я завернул мои классы вокруг реализованного QTcpSocket (поскольку это протокол TCP, и мне нужно иметь возможность использовать raw-сокет и добавленные функции как как можно скорее).Qt5 QTcpSocket производный класс и QTcpServer

Таким образом, для простоты, мой код структурирован следующим образом:

class MyTCPSocket : public QTcpSocket 
{ 
Q_OBJECT 
// .... 
} 

class MyTCPServer : public QTcpServer 
{ 
Q_OBJECT 
// .... 
} 

И с QTcpServer функции по умолчанию nextPendingConnection() возвращает экземпляр QTcpSocket, который я не могу бросить до MyTCPSocket (насколько мне известно, QTcpSocket не имеет структуры копирования).

Какой у меня лучший вариант для этого? Я думал, что могу создать новый MyTCPSocket и просто установить дескриптор сокета на тот, который был возвращен nextPendingConnection() из MyTCPServer, но я не был уверен, как это будет работать, когда старый сокет будет удален.

Есть ли лучший способ справиться с этой ситуацией?

ответ

1

Точно так же: переопределить incomingConnection, но не вызывайте базовый класс, вместо этого создайте экземпляр своего подкласса QTcpSocket и используйте на нем setSocketDescriptor. Если вы хотите сохранить поведение сигнала QTcpSocket, также звоните addPendingConnection и испускайте newConnection.

Затем просто снимите сокет, который вы получаете от nextPendingConnection, к вашему подклассу QTcpSocket.