event/BufferedSocket: pass std::exception_ptr to OnSocketError()
This commit is contained in:
parent
c8bb3c0b71
commit
e2b7c30811
@ -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 */
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user