5#include <unordered_map>
11enum class IocpOperationType {
20 OVERLAPPED overlapped;
22 IocpOperationType type;
23 std::function<void(ssize_t)> io_callback;
24 std::function<void(socket_t, sockaddr_in)> accept_callback;
25 std::function<void(
int)> connect_callback;
29 char accept_buffer[(
sizeof(sockaddr_in) + 16) * 2];
35 memset(&overlapped, 0,
sizeof(OVERLAPPED));
39class IocpProactor :
public Proactor {
42 ~IocpProactor()
override;
44 void run_once(
int timeout_ms)
override;
46 void async_read(socket_t fd,
void* buffer,
size_t size, std::function<
void(ssize_t bytes_read)> callback)
override;
47 void async_write(socket_t fd,
const void* buffer,
size_t size, std::function<
void(ssize_t bytes_written)> callback)
override;
51 void async_wait_read(socket_t fd, std::function<
void()> callback)
override;
52 void async_wait_write(socket_t fd, std::function<
void()> callback)
override;
54 void async_sendfile(socket_t out_fd,
int in_fd, off_t offset,
size_t count, std::function<
void(ssize_t bytes_written)> callback)
override;
55 void async_accept(socket_t fd, std::function<
void(socket_t new_fd, sockaddr_in addr)> callback)
override;
56 void async_connect(socket_t fd,
const sockaddr_in& addr, std::function<
void(
int status)> callback)
override;
58 void remove(socket_t fd)
override;
61 void register_socket(socket_t fd);
65 std::unordered_map<socket_t, std::vector<IocpContext*>> pending_contexts_;
Definition ResponseWriter.hpp:7
int socket_t
Definition PlatformSocket.hpp:36
constexpr socket_t INVALID_SOCKET_FD
Definition PlatformSocket.hpp:37