Add {Stream,DataSink}::is_alive
This commit is contained in:
parent
131bc6c674
commit
3907672163
18
httplib.h
18
httplib.h
@ -530,6 +530,7 @@ public:
|
||||
|
||||
std::function<bool(const char *data, size_t data_len)> write;
|
||||
std::function<bool()> is_writable;
|
||||
std::function<bool()> is_alive;
|
||||
std::function<void()> done;
|
||||
std::function<void(const Headers &trailer)> done_with_trailer;
|
||||
std::ostream os;
|
||||
@ -722,6 +723,7 @@ public:
|
||||
|
||||
virtual bool is_readable() const = 0;
|
||||
virtual bool is_writable() const = 0;
|
||||
virtual bool is_alive() const = 0;
|
||||
|
||||
virtual ssize_t read(char *ptr, size_t size) = 0;
|
||||
virtual ssize_t write(const char *ptr, size_t size) = 0;
|
||||
@ -2333,6 +2335,7 @@ public:
|
||||
|
||||
bool is_readable() const override;
|
||||
bool is_writable() const override;
|
||||
bool is_alive() const override;
|
||||
ssize_t read(char *ptr, size_t size) override;
|
||||
ssize_t write(const char *ptr, size_t size) override;
|
||||
void get_remote_ip_and_port(std::string &ip, int &port) const override;
|
||||
@ -3205,6 +3208,7 @@ public:
|
||||
|
||||
bool is_readable() const override;
|
||||
bool is_writable() const override;
|
||||
bool is_alive() const override;
|
||||
ssize_t read(char *ptr, size_t size) override;
|
||||
ssize_t write(const char *ptr, size_t size) override;
|
||||
void get_remote_ip_and_port(std::string &ip, int &port) const override;
|
||||
@ -3235,6 +3239,7 @@ public:
|
||||
|
||||
bool is_readable() const override;
|
||||
bool is_writable() const override;
|
||||
bool is_alive() const override;
|
||||
ssize_t read(char *ptr, size_t size) override;
|
||||
ssize_t write(const char *ptr, size_t size) override;
|
||||
void get_remote_ip_and_port(std::string &ip, int &port) const override;
|
||||
@ -4410,6 +4415,7 @@ inline bool write_content(Stream &strm, const ContentProvider &content_provider,
|
||||
};
|
||||
|
||||
data_sink.is_writable = [&]() -> bool { return strm.is_writable(); };
|
||||
data_sink.is_alive = [&]() -> bool { return strm.is_alive(); };
|
||||
|
||||
while (offset < end_offset && !is_shutting_down()) {
|
||||
if (!strm.is_writable()) {
|
||||
@ -4456,6 +4462,7 @@ write_content_without_length(Stream &strm,
|
||||
};
|
||||
|
||||
data_sink.is_writable = [&]() -> bool { return strm.is_writable(); };
|
||||
data_sink.is_alive = [&]() -> bool { return strm.is_alive(); };
|
||||
|
||||
data_sink.done = [&](void) { data_available = false; };
|
||||
|
||||
@ -4508,6 +4515,7 @@ write_content_chunked(Stream &strm, const ContentProvider &content_provider,
|
||||
};
|
||||
|
||||
data_sink.is_writable = [&]() -> bool { return strm.is_writable(); };
|
||||
data_sink.is_alive = [&]() -> bool { return strm.is_alive(); };
|
||||
|
||||
auto done_with_trailer = [&](const Headers *trailer) {
|
||||
if (!ok) { return; }
|
||||
@ -5821,6 +5829,10 @@ inline bool SocketStream::is_writable() const {
|
||||
is_socket_alive(sock_);
|
||||
}
|
||||
|
||||
inline bool SocketStream::is_alive() const {
|
||||
return is_socket_alive(sock_);
|
||||
}
|
||||
|
||||
inline ssize_t SocketStream::read(char *ptr, size_t size) {
|
||||
#ifdef _WIN32
|
||||
size =
|
||||
@ -5895,6 +5907,8 @@ inline bool BufferStream::is_readable() const { return true; }
|
||||
|
||||
inline bool BufferStream::is_writable() const { return true; }
|
||||
|
||||
inline bool BufferStream::is_alive() const { return true; }
|
||||
|
||||
inline ssize_t BufferStream::read(char *ptr, size_t size) {
|
||||
#if defined(_MSC_VER) && _MSC_VER < 1910
|
||||
auto len_read = buffer._Copy_s(ptr, size, size, position);
|
||||
@ -8904,6 +8918,10 @@ inline bool SSLSocketStream::is_writable() const {
|
||||
is_socket_alive(sock_);
|
||||
}
|
||||
|
||||
inline bool SSLSocketStream::is_alive() const {
|
||||
return is_socket_alive(sock_);
|
||||
}
|
||||
|
||||
inline ssize_t SSLSocketStream::read(char *ptr, size_t size) {
|
||||
if (SSL_pending(ssl_) > 0) {
|
||||
return SSL_read(ssl_, ptr, static_cast<int>(size));
|
||||
|
||||
Loading…
Reference in New Issue
Block a user