aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/coroutine/engine/poller.h
diff options
context:
space:
mode:
Diffstat (limited to 'library/cpp/coroutine/engine/poller.h')
-rw-r--r--library/cpp/coroutine/engine/poller.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/library/cpp/coroutine/engine/poller.h b/library/cpp/coroutine/engine/poller.h
new file mode 100644
index 0000000000..8ea012c0fc
--- /dev/null
+++ b/library/cpp/coroutine/engine/poller.h
@@ -0,0 +1,50 @@
+#pragma once
+
+#include <util/generic/ptr.h>
+#include <util/generic/vector.h>
+#include <util/network/socket.h>
+#include <util/network/pollerimpl.h>
+#include <util/datetime/base.h>
+
+enum class EContPoller {
+ Default /* "default" */,
+ Combined /* "combined" */,
+ Select /* "select" */,
+ Poll /* "poll" */,
+ Epoll /* "epoll" */,
+ Kqueue /* "kqueue" */
+};
+
+class IPollerFace {
+public:
+ struct TChange {
+ SOCKET Fd;
+ void* Data;
+ ui16 Flags;
+ };
+
+ struct TEvent {
+ void* Data;
+ int Status;
+ ui16 Filter;
+ };
+
+ using TEvents = TVector<TEvent>;
+
+ virtual ~IPollerFace() {
+ }
+
+ void Set(void* ptr, SOCKET fd, ui16 flags) {
+ const TChange c = {fd, ptr, flags};
+
+ Set(c);
+ }
+
+ virtual void Set(const TChange& change) = 0;
+ virtual void Wait(TEvents& events, TInstant deadLine) = 0;
+ virtual EContPoller PollEngine() const = 0;
+
+ static THolder<IPollerFace> Default();
+ static THolder<IPollerFace> Construct(TStringBuf name);
+ static THolder<IPollerFace> Construct(EContPoller poller);
+};