summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/Client.hxx2
-rw-r--r--src/client/ClientEvent.cxx4
-rw-r--r--src/event/BufferedSocket.cxx11
-rw-r--r--src/event/BufferedSocket.hxx5
-rw-r--r--src/event/FullyBufferedSocket.cxx10
-rw-r--r--src/output/plugins/httpd/HttpdClient.cxx4
-rw-r--r--src/output/plugins/httpd/HttpdClient.hxx2
7 files changed, 13 insertions, 25 deletions
diff --git a/src/client/Client.hxx b/src/client/Client.hxx
index 4de5ad8c6..f46a38155 100644
--- a/src/client/Client.hxx
+++ b/src/client/Client.hxx
@@ -200,7 +200,7 @@ public:
private:
/* virtual methods from class BufferedSocket */
virtual InputResult OnSocketInput(void *data, size_t length) override;
- virtual void OnSocketError(Error &&error) override;
+ void OnSocketError(std::exception_ptr ep) override;
virtual void OnSocketClosed() override;
/* virtual methods from class TimeoutMonitor */
diff --git a/src/client/ClientEvent.cxx b/src/client/ClientEvent.cxx
index 064b542b9..2d90b90cf 100644
--- a/src/client/ClientEvent.cxx
+++ b/src/client/ClientEvent.cxx
@@ -22,9 +22,9 @@
#include "Log.hxx"
void
-Client::OnSocketError(Error &&error)
+Client::OnSocketError(std::exception_ptr ep)
{
- FormatError(error, "error on client %d", num);
+ FormatError(ep, "error on client %d", num);
SetExpired();
}
diff --git a/src/event/BufferedSocket.cxx b/src/event/BufferedSocket.cxx
index f4a5ef287..dbdcf7f1d 100644
--- a/src/event/BufferedSocket.cxx
+++ b/src/event/BufferedSocket.cxx
@@ -20,8 +20,6 @@
#include "config.h"
#include "BufferedSocket.hxx"
#include "net/SocketError.hxx"
-#include "util/Error.hxx"
-#include "util/Domain.hxx"
#include "Compiler.h"
#include <algorithm>
@@ -45,7 +43,7 @@ BufferedSocket::DirectRead(void *data, size_t length)
if (IsSocketErrorClosed(code))
OnSocketClosed();
else
- OnSocketError(NewSocketError(code));
+ OnSocketError(std::make_exception_ptr(MakeSocketError(code, "Failed to receive from socket")));
return -1;
}
@@ -80,12 +78,7 @@ BufferedSocket::ResumeInput()
switch (result) {
case InputResult::MORE:
if (input.IsFull()) {
- // TODO
- static constexpr Domain buffered_socket_domain("buffered_socket");
- Error error;
- error.Set(buffered_socket_domain,
- "Input buffer is full");
- OnSocketError(std::move(error));
+ OnSocketError(std::make_exception_ptr(std::runtime_error("Input buffer is full")));
return false;
}
diff --git a/src/event/BufferedSocket.hxx b/src/event/BufferedSocket.hxx
index 8700c7e42..6a2992057 100644
--- a/src/event/BufferedSocket.hxx
+++ b/src/event/BufferedSocket.hxx
@@ -24,10 +24,11 @@
#include "SocketMonitor.hxx"
#include "util/StaticFifoBuffer.hxx"
+#include <exception>
+
#include <assert.h>
#include <stdint.h>
-class Error;
class EventLoop;
/**
@@ -109,7 +110,7 @@ protected:
*/
virtual InputResult OnSocketInput(void *data, size_t length) = 0;
- virtual void OnSocketError(Error &&error) = 0;
+ virtual void OnSocketError(std::exception_ptr ep) = 0;
virtual void OnSocketClosed() = 0;
virtual bool OnSocketReady(unsigned flags) override;
diff --git a/src/event/FullyBufferedSocket.cxx b/src/event/FullyBufferedSocket.cxx
index 21a038044..b464e83b9 100644
--- a/src/event/FullyBufferedSocket.cxx
+++ b/src/event/FullyBufferedSocket.cxx
@@ -20,8 +20,6 @@
#include "config.h"
#include "FullyBufferedSocket.hxx"
#include "net/SocketError.hxx"
-#include "util/Error.hxx"
-#include "util/Domain.hxx"
#include "Compiler.h"
#include <assert.h>
@@ -42,7 +40,7 @@ FullyBufferedSocket::DirectWrite(const void *data, size_t length)
if (IsSocketErrorClosed(code))
OnSocketClosed();
else
- OnSocketError(NewSocketError(code));
+ OnSocketError(std::make_exception_ptr(MakeSocketError(code, "Failed to send to socket")));
}
return nbytes;
@@ -85,11 +83,7 @@ FullyBufferedSocket::Write(const void *data, size_t length)
const bool was_empty = output.IsEmpty();
if (!output.Append(data, length)) {
- // TODO
- static constexpr Domain buffered_socket_domain("buffered_socket");
- Error error;
- error.Set(buffered_socket_domain, "Output buffer is full");
- OnSocketError(std::move(error));
+ OnSocketError(std::make_exception_ptr(std::runtime_error("Output buffer is full")));
return false;
}
diff --git a/src/output/plugins/httpd/HttpdClient.cxx b/src/output/plugins/httpd/HttpdClient.cxx
index f12f833e2..e9cda85f0 100644
--- a/src/output/plugins/httpd/HttpdClient.cxx
+++ b/src/output/plugins/httpd/HttpdClient.cxx
@@ -474,9 +474,9 @@ HttpdClient::OnSocketInput(void *data, size_t length)
}
void
-HttpdClient::OnSocketError(Error &&error)
+HttpdClient::OnSocketError(std::exception_ptr ep)
{
- LogError(error);
+ LogError(ep);
}
void
diff --git a/src/output/plugins/httpd/HttpdClient.hxx b/src/output/plugins/httpd/HttpdClient.hxx
index 222b1da99..07806f4a0 100644
--- a/src/output/plugins/httpd/HttpdClient.hxx
+++ b/src/output/plugins/httpd/HttpdClient.hxx
@@ -191,7 +191,7 @@ private:
protected:
virtual bool OnSocketReady(unsigned flags) override;
virtual InputResult OnSocketInput(void *data, size_t length) override;
- virtual void OnSocketError(Error &&error) override;
+ void OnSocketError(std::exception_ptr ep) override;
virtual void OnSocketClosed() override;
};