Возможно ли, чтобы QTcpSocket выпустил свой дескриптор, чтобы владение сокетом могут быть переданы к другому объекту QTcpSocket в другом потоке или к QSslSocket, без закрытия / прерывания сокет?
socket1.setDescriptor(descriptor);
// .....
descriptor = socket1.descriptor();
socket1.release(); // <--- Is there a way to do this?
socket2.setSocketDescriptor(descriptor);
Нет, вы не можете освободить дескриптор сокета, если он был назначен QTcpSocket
,
Но я не уверен, что тебе это понадобится. QTcpSocket
обычно можно перенести в другой поток с moveToThread
, ограничения такие же, как у любого перемещенного QObject
:
moveToThread
должен вызываться внутри потока, к которому в данный момент принадлежит объект,theObject->setParent(0);
или переместите родителя вместо объекта),и потому что это QTcpSocket
получающий поток должен запустить цикл обработки событий или вам нужно использовать waitFor...
функции в этой теме.
Эта заметка кажется, предполагает, что это работает только для сокетов, начиная с Qt 4.7.
Других решений пока нет …