diff options
author | Alex Trotsenko <alex1973tr@gmail.com> | 2021-09-11 17:32:09 +0300 |
---|---|---|
committer | Alex Trotsenko <alex1973tr@gmail.com> | 2021-09-18 13:50:28 +0300 |
commit | b2c3b3e8fe0d8bdc88051d0120aaa8d5cf8acce0 (patch) | |
tree | 6d3bdfc75dfb1870202b82ef4fcba19e30d6ede6 /src/network/socket/qlocalsocket_win.cpp | |
parent | f4aaba593c743af870fe224b4186225d67b617fc (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.cpp | 12 |
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); |