Может ли QTcpSocket выпустить свой дескриптор

Возможно ли, чтобы QTcpSocket освободил свой дескриптор, чтобы право собственности на сокет можно было передать другому объекту QTcpSocket в другом потоке или QSslSocket без закрытия/прерывания розетка?

socket1.setDescriptor(descriptor);

// .....

descriptor = socket1.descriptor();
socket1.release();                       // <--- Is there a way to do this?
socket2.setSocketDescriptor(descriptor);

person sashoalm    schedule 23.01.2013    source источник


Ответы (1)


Нет, вы не можете освободить дескриптор сокета после того, как он был назначен QTcpSocket.

Но я не уверен, что вам это нужно. QTcpSocket обычно можно переместить в другой поток с помощью moveToThread, ограничения такие же, как и для любого перемещенного QObject:

  • moveToThread следует вызывать внутри потока, которому в данный момент принадлежит объект,
  • у объекта не может быть родителя (вы можете удалить его с помощью theObject->setParent(0); или переместить родителя вместо объекта),

и поскольку это QTcpSocket, принимающий поток должен запускать цикл событий, или вам нужно использовать функции waitFor... в этом потоке.

Это примечание предполагает, что это работает только для сокетов начиная с Qt 4.7.

person alexisdm    schedule 24.01.2013