MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
ssl_socket.hpp
1#ifndef MSTL_NETWORK_SSL_SOCKET_HPP__
2#define MSTL_NETWORK_SSL_SOCKET_HPP__
3#include "tcp_socket.hpp"
4#ifdef MSTL_SUPPORT_OPENSSL__
5#include "MSTL/core/string/string.hpp"
6#include "ssl_context.hpp"
7#include <openssl/ssl.h>
9
10class MSTL_API ssl_socket {
11private:
12 ::SSL* ssl_ = nullptr;
13 tcp_socket socket_{};
14
15 string last_error_{};
16
17public:
18 ssl_socket() noexcept = default;
19 ~ssl_socket() { close(); }
20
21 explicit ssl_socket(tcp_socket sock);
22 explicit ssl_socket(const ssl_context& ctx, tcp_socket sock);
23
24 ssl_socket(const ssl_socket&) = delete;
25 ssl_socket& operator =(const ssl_socket&) = delete;
26 ssl_socket(ssl_socket&& other) noexcept = default;
27 ssl_socket& operator =(ssl_socket&& other) noexcept = default;
28
29 MSTL_NODISCARD bool accept();
30 void close() noexcept;
31
32 MSTL_NODISCARD bool ssl_valid() const noexcept {
33 return ssl_ != nullptr;
34 }
35 MSTL_NODISCARD bool tcp_valid() const noexcept {
36 return socket_.is_valid();
37 }
38 MSTL_NODISCARD bool is_valid() const noexcept {
39 return ssl_ != nullptr || socket_.is_valid();
40 }
41
42 bool set_context(const ssl_context& ctx);
43
44 ssize_t receive(void* buffer, size_t size) const;
45 ssize_t send(const void* buffer, size_t size) const;
46
47 MSTL_NODISCARD const tcp_socket& socket() const noexcept { return socket_; }
48 MSTL_NODISCARD tcp_socket& socket() noexcept { return socket_; }
49 MSTL_NODISCARD tcp_socket::socket_t sockfd() const noexcept { return socket_.sockfd(); }
50
51 MSTL_NODISCARD const string& last_error() const noexcept { return last_error_; }
52
53 MSTL_NODISCARD bool operator ==(const ssl_socket& other) const noexcept {
54 return socket_ == other.socket_ && ssl_ == other.ssl_;
55 }
56 MSTL_NODISCARD bool operator !=(const ssl_socket& other) const noexcept {
57 return !(*this == other);
58 }
59};
60
62#endif
63#endif // MSTL_NETWORK_SSL_SOCKET_HPP__
bool operator!=(const function< Res(Args...)> &f, nullptr_t null) noexcept
不等于空指针比较
bool operator==(const function< Res(Args...)> &f, nullptr_t null) noexcept
等于空指针比较
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
int64_t ssize_t
有符号大小类型
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr decltype(auto) size(const Container &cont) noexcept(noexcept(cont.size()))
获取容器的大小