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>
10class MSTL_API ssl_socket {
12 ::SSL* ssl_ =
nullptr;
18 ssl_socket() noexcept = default;
19 ~ssl_socket() { close(); }
21 explicit ssl_socket(tcp_socket sock);
22 explicit ssl_socket(
const ssl_context& ctx, tcp_socket sock);
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;
29 MSTL_NODISCARD
bool accept();
30 void close() noexcept;
32 MSTL_NODISCARD
bool ssl_valid() const noexcept {
33 return ssl_ !=
nullptr;
35 MSTL_NODISCARD
bool tcp_valid() const noexcept {
36 return socket_.is_valid();
38 MSTL_NODISCARD
bool is_valid() const noexcept {
39 return ssl_ !=
nullptr || socket_.is_valid();
42 bool set_context(
const ssl_context& ctx);
45 ssize_t send(
const void* buffer,
size_t size)
const;
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(); }
51 MSTL_NODISCARD
const string& last_error() const noexcept {
return last_error_; }
53 MSTL_NODISCARD
bool operator ==(
const ssl_socket& other)
const noexcept {
54 return socket_ == other.socket_ && ssl_ == other.ssl_;
56 MSTL_NODISCARD
bool operator !=(
const ssl_socket& other)
const noexcept {
57 return !(*
this == other);
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
MSTL_NODISCARD MSTL_ALWAYS_INLINE constexpr decltype(auto) size(const Container &cont) noexcept(noexcept(cont.size()))
获取容器的大小