Qt5 用のプログラムをコンパイルしましたが、実行時の動作が異なります。
Qt5 では、イベントループが再入力されるまでソケットは切断されませんwaitForDisconnected()
。
たとえば、このコード:
socket.disconnectFromServer();
qDebug("Started waitForDisconnected...");
socket.waitForDisconnected();
qDebug("Finished waitForDisconnected.");
qDebug("Started Sleep for 10 seconds...");
Sleep(10*1000);
qDebug("Finished Sleep.");
qDebug("Started QEventLoop...");
QEventLoop().exec();
qDebug("Finished QEventLoop.");
次の出力が得られます。
Started waitForDisconnected...
QLocalSocket::waitForDisconnected() is not allowed in UnconnectedState
Finished waitForDisconnected.
Started Sleep for 10 seconds...
Finished Sleep.
Started QEventLoop...
Started QEventLoop...
しかし、メッセージを受け取るまでソケット自体は削除されません。ソケットが反対側から切断されるのを待つ別のアプリケーションからこれを監視しているためです。
Qt4 でコンパイルすると、同じコードが正常に動作waitForDisconnected()
し、ソケットが戻る前に切断されます。Qt5waitForDisconnected()
では、実際には切断されていないのに、ソケットが切断されたと主張して返されます。
Qt の私のバージョンは 5.1.1 です。