WinRT: Do not try to cancel IO for udp sockets on socket close
As the functionality is not available for udp sockets trying to call it will cause a crash on socket close. Task-number: QTBUG-53424 Change-Id: Id80b36a248d12bf360135b2374c0a0efdab3a1f0 Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
This commit is contained in:
parent
5cbea54986
commit
eba979f695
@ -458,17 +458,19 @@ void QNativeSocketEngine::close()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if _MSC_VER >= 1900
|
#if _MSC_VER >= 1900
|
||||||
// To close the connection properly (not with a hard reset) all pending read operation have to
|
if (d->socketType == QAbstractSocket::TcpSocket) {
|
||||||
// be finished or cancelled. The API isn't available on Windows 8.1 though.
|
// To close the connection properly (not with a hard reset) all pending read operation have to
|
||||||
ComPtr<IStreamSocket3> socket3;
|
// be finished or cancelled. The API isn't available on Windows 8.1 though.
|
||||||
hr = d->tcpSocket()->QueryInterface(IID_PPV_ARGS(&socket3));
|
ComPtr<IStreamSocket3> socket3;
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
hr = d->tcpSocket()->QueryInterface(IID_PPV_ARGS(&socket3));
|
||||||
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
|
|
||||||
ComPtr<IAsyncAction> action;
|
ComPtr<IAsyncAction> action;
|
||||||
hr = socket3->CancelIOAsync(&action);
|
hr = socket3->CancelIOAsync(&action);
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
hr = QWinRTFunctions::await(action);
|
hr = QWinRTFunctions::await(action);
|
||||||
Q_ASSERT_SUCCEEDED(hr);
|
Q_ASSERT_SUCCEEDED(hr);
|
||||||
|
}
|
||||||
#endif // _MSC_VER >= 1900
|
#endif // _MSC_VER >= 1900
|
||||||
|
|
||||||
if (d->readOp) {
|
if (d->readOp) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user