NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
ftp_server.hpp
1#ifndef NEFORCE_NETWORK_FTP_FTP_SERVER_HPP__
2#define NEFORCE_NETWORK_FTP_FTP_SERVER_HPP__
3#include "NeForce/network/ftp/ftp_protocol.hpp"
5NEFORCE_BEGIN_NAMESPACE__
6
7class NEFORCE_API ftp_session final : public ftp_protocol {
8public:
9 explicit ftp_session(tcp_socket&& sock) :
10 ftp_protocol(sock.release()) {}
11
12 ftp_session(const ftp_session&) = delete;
13 ftp_session& operator=(const ftp_session&) = delete;
14
15 ftp_session(ftp_session&&) = default;
16 ftp_session& operator=(ftp_session&&) = default;
17
18 ~ftp_session() override = default;
19
20 pair<string, string> read_command();
21
22 void reply(int code, const string& msg) { send_response(code, msg); }
23
24 void accept_tls(ssl_context& ctx);
25};
26
27class NEFORCE_API ftp_server {
28private:
29 tcp_acceptor acceptor_;
30
31public:
32 ftp_server() = default;
33
34 ftp_server(const ftp_server&) = delete;
35 ftp_server& operator=(const ftp_server&) = delete;
36
37 ftp_server(ftp_server&&) = default;
38 ftp_server& operator=(ftp_server&&) = default;
39
40 ~ftp_server() = default;
41
42 void listen(const ip_address& endpoint, int backlog = SOMAXCONN) { acceptor_.open(endpoint, backlog); }
43
44 NEFORCE_NODISCARD ftp_session accept() { return ftp_session(acceptor_.accept()); }
45
46 NEFORCE_NODISCARD optional<ftp_session> accept_nonblock() {
47 auto sock = acceptor_.accept_nonblock();
48 if (sock) {
49 return optional<ftp_session>{ftp_session{move(*sock)}};
50 }
51 return {};
52 }
53
54 NEFORCE_NODISCARD bool is_listening() const noexcept { return acceptor_.is_open(); }
55
56 NEFORCE_NODISCARD optional<ip_address> local_endpoint() const { return acceptor_.local_endpoint(); }
57
58 void close() noexcept { acceptor_.close(); }
59};
60
61NEFORCE_END_NAMESPACE__
62#endif // NEFORCE_NETWORK_FTP_FTP_SERVER_HPP__
bool close() noexcept override
关闭socket
NEFORCE_NODISCARD bool is_open() const noexcept
检查socket是否已打开
NEFORCE_NODISCARD optional< ip_address > local_endpoint() const
获取本地端点地址
void listen(int backlog)
开始监听连接(TCP)
void open(const ip_address &endpoint, int backlog=SOMAXCONN)
打开并开始监听
NEFORCE_NODISCARD tcp_socket accept()
接受客户端连接(阻塞模式)
NEFORCE_NODISCARD optional< tcp_socket > accept_nonblock()
接受客户端连接(非阻塞模式)
@ release
释放操作,确保前面的读写不会被重排到后面
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
TCP Acceptor实现