From 08f9a1bd6ab9b1777ee5ba163d75e5c848c39eb4 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Tue, 10 Nov 2015 08:28:12 +0100 Subject: [PATCH] winrt: Fixed listening to tcp socket For some reason add_ConnectionReceived has to be called on the Xaml thread now. Otherwise the callback function won't be called and thus listening on a TCP socket won't work at all. Task-number: QTBUG-49121 Change-Id: I11ce2f72b0c1d3bb20e9579de5a2ce5150ca966a Reviewed-by: Andrew Knight Reviewed-by: Samuel Nevala Reviewed-by: Maurice Kalinowski --- src/network/socket/qnativesocketengine_winrt.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/network/socket/qnativesocketengine_winrt.cpp b/src/network/socket/qnativesocketengine_winrt.cpp index cfb950592fb..e9fa2277339 100644 --- a/src/network/socket/qnativesocketengine_winrt.cpp +++ b/src/network/socket/qnativesocketengine_winrt.cpp @@ -47,11 +47,13 @@ #include #include +#include #ifndef QT_NO_SSL #include #endif +#include #include #include #include @@ -315,9 +317,11 @@ bool QNativeSocketEngine::bind(const QHostAddress &address, quint16 port) Q_ASSERT_SUCCEEDED(hr); } - hr = d->tcpListener->add_ConnectionReceived( - Callback(d, &QNativeSocketEnginePrivate::handleClientConnection).Get(), - &d->connectionToken); + hr = QEventDispatcherWinRT::runOnXamlThread([d]() { + return d->tcpListener->add_ConnectionReceived( + Callback(d, &QNativeSocketEnginePrivate::handleClientConnection).Get(), + &d->connectionToken); + }); Q_ASSERT_SUCCEEDED(hr); hr = d->tcpListener->BindEndpointAsync(hostAddress.Get(), portString.Get(), &op); } else if (d->socketType == QAbstractSocket::UdpSocket) {