diff options
author | Pasi Petäjäjärvi <pasi.petajajarvi@qt.io> | 2022-02-21 12:19:49 +0200 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2022-02-24 07:49:37 +0000 |
commit | 3a151faec2c15785eb1eb5fee7275cd038b92ba9 (patch) | |
tree | 1a516d68a0114b8e0069196620e05751c178ca0b /src | |
parent | df270368eef9ccc357f9fea3c51a8152bdecb2d6 (diff) |
QNX: Fix support for abstract Unix-domain socket
As QNX claims to support abstract Unix-domain sockets, its getsockname
always returns for socket that has not been bound to local name
address_len of sun_path as maximum length (106) even when it does not
contain valid address.
https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.lib_ref/topic/u/unix_proto.html
Pick-to: 6.2 6.3
Change-Id: I0f0f5c05611c8db6af35377dde16450f58c83c56
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/network/kernel/qtnetworkglobal_p.h | 2 | ||||
-rw-r--r-- | src/network/socket/qlocalserver_unix.cpp | 4 |
2 files changed, 5 insertions, 1 deletions
diff --git a/src/network/kernel/qtnetworkglobal_p.h b/src/network/kernel/qtnetworkglobal_p.h index d1452ac704..6468b516b2 100644 --- a/src/network/kernel/qtnetworkglobal_p.h +++ b/src/network/kernel/qtnetworkglobal_p.h @@ -59,7 +59,7 @@ QT_BEGIN_NAMESPACE enum { -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) || defined(Q_OS_QNX) PlatformSupportsAbstractNamespace = true #else PlatformSupportsAbstractNamespace = false diff --git a/src/network/socket/qlocalserver_unix.cpp b/src/network/socket/qlocalserver_unix.cpp index 5840958350..b60f7d0ceb 100644 --- a/src/network/socket/qlocalserver_unix.cpp +++ b/src/network/socket/qlocalserver_unix.cpp @@ -239,6 +239,10 @@ bool QLocalServerPrivate::listen(qintptr socketDescriptor) QT_SOCKLEN_T len = sizeof(addr); memset(&addr, 0, sizeof(addr)); if (::getsockname(socketDescriptor, (sockaddr *)&addr, &len) == 0) { +#if defined(Q_OS_QNX) + if (addr.sun_path[0] == 0 && addr.sun_path[1] == 0) + len = SUN_LEN(&addr); +#endif if (QLocalSocketPrivate::parseSockaddr(addr, len, fullServerName, serverName, abstractAddress)) { QLocalServer::SocketOptions options = socketOptions.value(); |