summaryrefslogtreecommitdiffstats
path: root/src/network/socket/qlocalsocket_win.cpp
diff options
context:
space:
mode:
authorAlex Trotsenko <alex1973tr@gmail.com>2021-09-11 17:32:09 +0300
committerAlex Trotsenko <alex1973tr@gmail.com>2021-09-18 13:50:28 +0300
commitb2c3b3e8fe0d8bdc88051d0120aaa8d5cf8acce0 (patch)
tree6d3bdfc75dfb1870202b82ef4fcba19e30d6ede6 /src/network/socket/qlocalsocket_win.cpp
parentf4aaba593c743af870fe224b4186225d67b617fc (diff)
Q{LocalSocket|Process}/Win: handle write errors
To match the Unix behavior, we should emit errorOccurred() signal and close the channel if the write operation fails. Change-Id: Iac3acb18dbbfe6e7e8afb2555d9adaff1fe98d0f Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/network/socket/qlocalsocket_win.cpp')
-rw-r--r--src/network/socket/qlocalsocket_win.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp
index c4da59c278..019829cc9c 100644
--- a/src/network/socket/qlocalsocket_win.cpp
+++ b/src/network/socket/qlocalsocket_win.cpp
@@ -310,6 +310,8 @@ qint64 QLocalSocket::writeData(const char *data, qint64 len)
d->pipeWriter = new QWindowsPipeWriter(d->handle, this);
QObjectPrivate::connect(d->pipeWriter, &QWindowsPipeWriter::bytesWritten,
d, &QLocalSocketPrivate::_q_bytesWritten);
+ QObjectPrivate::connect(d->pipeWriter, &QWindowsPipeWriter::writeFailed,
+ d, &QLocalSocketPrivate::_q_writeFailed);
}
if (d->isWriteChunkCached(data, len))
@@ -455,6 +457,16 @@ void QLocalSocketPrivate::_q_bytesWritten(qint64 bytes)
q->disconnectFromServer();
}
+void QLocalSocketPrivate::_q_writeFailed()
+{
+ Q_Q(QLocalSocket);
+ error = QLocalSocket::PeerClosedError;
+ errorString = QLocalSocket::tr("Remote closed");
+ emit q->errorOccurred(error);
+
+ _q_pipeClosed();
+}
+
qintptr QLocalSocket::socketDescriptor() const
{
Q_D(const QLocalSocket);