From 0fcb6c26c1f4a0506bfa7dba181ed6db4e02bdb0 Mon Sep 17 00:00:00 2001 From: Alex Trotsenko Date: Sat, 2 Sep 2017 20:04:38 +0300 Subject: [PATCH] QLocalSocket: forward skipping to the inner socket As QLocalSocket keeps incoming data in the inner socket object, we can implement the outer's skip() by simply calling the inner's. This avoids the slow read()-based code path provided by the base class. Change-Id: I66547601ebad1b4acf168475bebd81fbeef969f8 Reviewed-by: Timur Pocheptsov Reviewed-by: Edward Welbourne --- src/network/socket/qlocalsocket_p.h | 2 ++ src/network/socket/qlocalsocket_tcp.cpp | 5 +++++ src/network/socket/qlocalsocket_unix.cpp | 5 +++++ 3 files changed, 12 insertions(+) diff --git a/src/network/socket/qlocalsocket_p.h b/src/network/socket/qlocalsocket_p.h index eb59af55776..8b72da397fb 100644 --- a/src/network/socket/qlocalsocket_p.h +++ b/src/network/socket/qlocalsocket_p.h @@ -120,6 +120,7 @@ public: void init(); #if defined(QT_LOCALSOCKET_TCP) + qint64 skip(qint64 maxSize) override; QLocalUnixSocket* tcpSocket; bool ownsTcpSocket; void setSocket(QLocalUnixSocket*); @@ -139,6 +140,7 @@ public: QWindowsPipeReader *pipeReader; QLocalSocket::LocalSocketError error; #else + qint64 skip(qint64 maxSize) override; QLocalUnixSocket unixSocket; QString generateErrorString(QLocalSocket::LocalSocketError, const QString &function) const; void errorOccurred(QLocalSocket::LocalSocketError, const QString &function); diff --git a/src/network/socket/qlocalsocket_tcp.cpp b/src/network/socket/qlocalsocket_tcp.cpp index 379cdd096df..41e5b47627b 100644 --- a/src/network/socket/qlocalsocket_tcp.cpp +++ b/src/network/socket/qlocalsocket_tcp.cpp @@ -83,6 +83,11 @@ void QLocalSocketPrivate::setSocket(QLocalUnixSocket* socket) tcpSocket->setParent(q); } +qint64 QLocalSocketPrivate::skip(qint64 maxSize) +{ + return tcpSocket->skip(maxSize); +} + void QLocalSocketPrivate::_q_error(QAbstractSocket::SocketError socketError) { Q_Q(QLocalSocket); diff --git a/src/network/socket/qlocalsocket_unix.cpp b/src/network/socket/qlocalsocket_unix.cpp index c1d79e8137b..d1df26d9f1a 100644 --- a/src/network/socket/qlocalsocket_unix.cpp +++ b/src/network/socket/qlocalsocket_unix.cpp @@ -88,6 +88,11 @@ void QLocalSocketPrivate::init() unixSocket.setParent(q); } +qint64 QLocalSocketPrivate::skip(qint64 maxSize) +{ + return unixSocket.skip(maxSize); +} + void QLocalSocketPrivate::_q_error(QAbstractSocket::SocketError socketError) { Q_Q(QLocalSocket);