event/BufferedSocket: pass std::exception_ptr to OnSocketError()

This commit is contained in:
Max Kellermann 2016-11-02 10:38:05 +01:00
parent c8bb3c0b71
commit e2b7c30811
7 changed files with 13 additions and 25 deletions

View File

@ -200,7 +200,7 @@ public:
private: private:
/* virtual methods from class BufferedSocket */ /* virtual methods from class BufferedSocket */
virtual InputResult OnSocketInput(void *data, size_t length) 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; virtual void OnSocketClosed() override;
/* virtual methods from class TimeoutMonitor */ /* virtual methods from class TimeoutMonitor */

View File

@ -22,9 +22,9 @@
#include "Log.hxx" #include "Log.hxx"
void 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(); SetExpired();
} }

View File

@ -20,8 +20,6 @@
#include "config.h" #include "config.h"
#include "BufferedSocket.hxx" #include "BufferedSocket.hxx"
#include "net/SocketError.hxx" #include "net/SocketError.hxx"
#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "Compiler.h" #include "Compiler.h"
#include <algorithm> #include <algorithm>
@ -45,7 +43,7 @@ BufferedSocket::DirectRead(void *data, size_t length)
if (IsSocketErrorClosed(code)) if (IsSocketErrorClosed(code))
OnSocketClosed(); OnSocketClosed();
else else
OnSocketError(NewSocketError(code)); OnSocketError(std::make_exception_ptr(MakeSocketError(code, "Failed to receive from socket")));
return -1; return -1;
} }
@ -80,12 +78,7 @@ BufferedSocket::ResumeInput()
switch (result) { switch (result) {
case InputResult::MORE: case InputResult::MORE:
if (input.IsFull()) { if (input.IsFull()) {
// TODO OnSocketError(std::make_exception_ptr(std::runtime_error("Input buffer is full")));
static constexpr Domain buffered_socket_domain("buffered_socket");
Error error;
error.Set(buffered_socket_domain,
"Input buffer is full");
OnSocketError(std::move(error));
return false; return false;
} }

View File

@ -24,10 +24,11 @@
#include "SocketMonitor.hxx" #include "SocketMonitor.hxx"
#include "util/StaticFifoBuffer.hxx" #include "util/StaticFifoBuffer.hxx"
#include <exception>
#include <assert.h> #include <assert.h>
#include <stdint.h> #include <stdint.h>
class Error;
class EventLoop; class EventLoop;
/** /**
@ -109,7 +110,7 @@ protected:
*/ */
virtual InputResult OnSocketInput(void *data, size_t length) = 0; 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 void OnSocketClosed() = 0;
virtual bool OnSocketReady(unsigned flags) override; virtual bool OnSocketReady(unsigned flags) override;

View File

@ -20,8 +20,6 @@
#include "config.h" #include "config.h"
#include "FullyBufferedSocket.hxx" #include "FullyBufferedSocket.hxx"
#include "net/SocketError.hxx" #include "net/SocketError.hxx"
#include "util/Error.hxx"
#include "util/Domain.hxx"
#include "Compiler.h" #include "Compiler.h"
#include <assert.h> #include <assert.h>
@ -42,7 +40,7 @@ FullyBufferedSocket::DirectWrite(const void *data, size_t length)
if (IsSocketErrorClosed(code)) if (IsSocketErrorClosed(code))
OnSocketClosed(); OnSocketClosed();
else else
OnSocketError(NewSocketError(code)); OnSocketError(std::make_exception_ptr(MakeSocketError(code, "Failed to send to socket")));
} }
return nbytes; return nbytes;
@ -85,11 +83,7 @@ FullyBufferedSocket::Write(const void *data, size_t length)
const bool was_empty = output.IsEmpty(); const bool was_empty = output.IsEmpty();
if (!output.Append(data, length)) { if (!output.Append(data, length)) {
// TODO OnSocketError(std::make_exception_ptr(std::runtime_error("Output buffer is full")));
static constexpr Domain buffered_socket_domain("buffered_socket");
Error error;
error.Set(buffered_socket_domain, "Output buffer is full");
OnSocketError(std::move(error));
return false; return false;
} }

View File

@ -474,9 +474,9 @@ HttpdClient::OnSocketInput(void *data, size_t length)
} }
void void
HttpdClient::OnSocketError(Error &&error) HttpdClient::OnSocketError(std::exception_ptr ep)
{ {
LogError(error); LogError(ep);
} }
void void

View File

@ -191,7 +191,7 @@ private:
protected: protected:
virtual bool OnSocketReady(unsigned flags) override; virtual bool OnSocketReady(unsigned flags) override;
virtual InputResult OnSocketInput(void *data, size_t length) 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; virtual void OnSocketClosed() override;
}; };