Add QLocalServer::socketDescriptor
Adds a function to return the native socket descriptor. It allows threaded or forked applications to reuse a previously created socket. [ChangeLog][QtNetwork][QLocalServer] Added a function to retrieve the socket descriptor. Task-number: QTBUG-55043 Change-Id: I556e97000d2c02ad2bdd636984de6c7564381c6a Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
3a072f354f
commit
5b24f0a6bb
@ -41,6 +41,10 @@
|
||||
#include "qlocalserver_p.h"
|
||||
#include "qlocalsocket.h"
|
||||
|
||||
#if defined(Q_OS_WIN) && !defined(QT_LOCALSOCKET_TCP)
|
||||
#include <QtCore/qt_windows.h>
|
||||
#endif
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
#ifndef QT_NO_LOCALSERVER
|
||||
@ -182,6 +186,42 @@ QLocalServer::SocketOptions QLocalServer::socketOptions() const
|
||||
return d->socketOptions;
|
||||
}
|
||||
|
||||
/*!
|
||||
\since 5.10
|
||||
Returns the native socket descriptor the server uses to listen
|
||||
for incoming instructions, or -1 if the server is not listening.
|
||||
|
||||
The type of the descriptor depends on the platform:
|
||||
\list
|
||||
\li On Windows, the returned value is a
|
||||
\l{https://msdn.microsoft.com/en-us/library/windows/desktop/ms740522(v=vs.85).aspx}
|
||||
{Winsock 2 Socket Handle}.
|
||||
|
||||
\li With WinRT and on INTEGRITY, the returned value is the
|
||||
QTcpServer socket descriptor and the type is defined by
|
||||
\l{QTcpServer::socketDescriptor}{socketDescriptor}.
|
||||
|
||||
\li On all other UNIX-like operating systems, the type is
|
||||
a file descriptor representing a listening socket.
|
||||
\endlist
|
||||
|
||||
\sa listen()
|
||||
*/
|
||||
qintptr QLocalServer::socketDescriptor() const
|
||||
{
|
||||
Q_D(const QLocalServer);
|
||||
if (!isListening())
|
||||
return -1;
|
||||
#if defined(QT_LOCALSOCKET_TCP)
|
||||
return d->tcpServer.socketDescriptor();
|
||||
#elif defined(Q_OS_WIN)
|
||||
const auto handle = d->connectionEventNotifier->handle();
|
||||
return handle != INVALID_HANDLE_VALUE ? qintptr(handle) : -1;
|
||||
#else
|
||||
return d->socketNotifier->socket();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
Stop listening for incoming connections. Existing connections are not
|
||||
affected, but any new connections will be refused.
|
||||
|
@ -93,6 +93,8 @@ public:
|
||||
void setSocketOptions(SocketOptions options);
|
||||
SocketOptions socketOptions() const;
|
||||
|
||||
qintptr socketDescriptor() const;
|
||||
|
||||
protected:
|
||||
virtual void incomingConnection(quintptr socketDescriptor);
|
||||
|
||||
|
@ -306,9 +306,11 @@ void tst_QLocalSocket::listen()
|
||||
// already isListening
|
||||
QTest::ignoreMessage(QtWarningMsg, "QLocalServer::listen() called when already listening");
|
||||
QVERIFY(!server.listen(name));
|
||||
QVERIFY(server.socketDescriptor() != -1);
|
||||
} else {
|
||||
QVERIFY(!server.errorString().isEmpty());
|
||||
QCOMPARE(server.serverError(), QAbstractSocket::HostNotFoundError);
|
||||
QCOMPARE(server.socketDescriptor(), -1);
|
||||
}
|
||||
QCOMPARE(server.maxPendingConnections(), 30);
|
||||
bool timedOut = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user