diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2014-12-24 17:01:52 -0200 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2015-02-15 01:26:28 +0000 |
commit | d866f6e8861647c45f438bc5b21905dacee41f8e (patch) | |
tree | fda6c73cc1164ff2cac9bccc02657cf2990347ff /src/network/socket/qnativesocketengine_winrt.cpp | |
parent | 0fa7374f1dc433b6b8955cb14dabb22c10f50854 (diff) |
Save two system calls for setting a socket non-blocking on Linux
Linux's socket(2) system call can take SOCK_NONBLOCK and let us avoid
the extra two fcntl(2) to change the setting after it's created.
Change-Id: Ie0d7a2d51acc21acd850cbee6d0f76e27b1ae859
Reviewed-by: Richard J. Moore <rich@kde.org>
Diffstat (limited to 'src/network/socket/qnativesocketengine_winrt.cpp')
-rw-r--r-- | src/network/socket/qnativesocketengine_winrt.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/network/socket/qnativesocketengine_winrt.cpp b/src/network/socket/qnativesocketengine_winrt.cpp index e60840d651..c49eda179a 100644 --- a/src/network/socket/qnativesocketengine_winrt.cpp +++ b/src/network/socket/qnativesocketengine_winrt.cpp @@ -768,7 +768,7 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc return false; } socketDescriptor = qintptr(socket.Detach()); - return true; + break; } case QAbstractSocket::UdpSocket: { ComPtr<IDatagramSocket> socket; @@ -780,13 +780,21 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc EventRegistrationToken token; socketDescriptor = qintptr(socket.Detach()); udpSocket()->add_MessageReceived(Callback<DatagramReceivedHandler>(this, &QNativeSocketEnginePrivate::handleNewDatagram).Get(), &token); - return true; + break; } default: qWarning("Invalid socket type"); return false; } - return false; + + // Make the socket nonblocking. + if (!setOption(QAbstractSocketEngine::NonBlockingSocketOption, 1)) { + setError(QAbstractSocket::UnsupportedSocketOperationError, NonBlockingInitFailedErrorString); + q_func()->close(); + return false; + } + + return true; } QNativeSocketEnginePrivate::QNativeSocketEnginePrivate() |