poller.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #pragma once
  2. #include <util/generic/ptr.h>
  3. #include <util/generic/vector.h>
  4. #include <util/network/socket.h>
  5. #include <util/network/pollerimpl.h>
  6. #include <util/datetime/base.h>
  7. enum class EContPoller {
  8. Default /* "default" */,
  9. Combined /* "combined" */,
  10. Select /* "select" */,
  11. Poll /* "poll" */,
  12. Epoll /* "epoll" */,
  13. Kqueue /* "kqueue" */
  14. };
  15. class IPollerFace {
  16. public:
  17. struct TChange {
  18. SOCKET Fd;
  19. void* Data;
  20. ui16 Flags;
  21. };
  22. struct TEvent {
  23. void* Data;
  24. int Status;
  25. ui16 Filter;
  26. };
  27. using TEvents = TVector<TEvent>;
  28. virtual ~IPollerFace() {
  29. }
  30. void Set(void* ptr, SOCKET fd, ui16 flags) {
  31. const TChange c = {fd, ptr, flags};
  32. Set(c);
  33. }
  34. virtual void Set(const TChange& change) = 0;
  35. virtual void Wait(TEvents& events, TInstant deadLine) = 0;
  36. virtual EContPoller PollEngine() const = 0;
  37. static THolder<IPollerFace> Default();
  38. static THolder<IPollerFace> Construct(TStringBuf name);
  39. static THolder<IPollerFace> Construct(EContPoller poller);
  40. };