summaryrefslogtreecommitdiffstats
path: root/network/netmgr/pollable.h
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2019-02-11 15:31:23 -0800
committerandroid-build-merger <android-build-merger@google.com>2019-02-11 15:31:23 -0800
commitdd7bd20e319cefbafc69f0748740864f12657f6c (patch)
tree8ee3cb35321655ad38530cd30c15ae99386e7544 /network/netmgr/pollable.h
parent4a61803e71e83d44f926048eb08ee9477779700c (diff)
parentae97ddcc37e8586a521106c4815fae588026c4c3 (diff)
downloadandroid_device_generic_goldfish-dd7bd20e319cefbafc69f0748740864f12657f6c.tar.gz
android_device_generic_goldfish-dd7bd20e319cefbafc69f0748740864f12657f6c.tar.bz2
android_device_generic_goldfish-dd7bd20e319cefbafc69f0748740864f12657f6c.zip
Snap for 5180536 from b05b939d85b47ed8c2b53114f8116699b859df09 to pi-platform-release
am: ae97ddcc37 Change-Id: I04d4d15458ae1881f3d347ba78e548820e135c5d
Diffstat (limited to 'network/netmgr/pollable.h')
-rw-r--r--network/netmgr/pollable.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/network/netmgr/pollable.h b/network/netmgr/pollable.h
new file mode 100644
index 0000000..fbf4baf
--- /dev/null
+++ b/network/netmgr/pollable.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2018, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <chrono>
+#include <vector>
+
+#include <poll.h>
+
+/* An interface for pollable classes.
+ */
+class Pollable {
+public:
+ using Clock = std::chrono::steady_clock;
+ using Timestamp = Clock::time_point;
+ virtual ~Pollable() = default;
+
+ /* Get the poll data for the next poll loop. The implementation can place
+ * as many fds as needed in |fds|.
+ */
+ virtual void getPollData(std::vector<pollfd>* fds) const = 0;
+ /* Get the timeout for the next poll loop. This should be a timestamp
+ * indicating when the timeout should be triggered. Note that this may
+ * be called at any time and any number of times for a poll loop so the
+ * deadline should not be adjusted in this call, a set deadline should
+ * just be returned. Note specifically that if a call to onReadAvailable
+ * modifies the deadline the timeout for the previous timestamp might not
+ * fire as the poller will check the timestamp AFTER onReadAvailable is
+ * called.
+ */
+ virtual Timestamp getTimeout() const = 0;
+ /* Called when there is data available to read on an fd associated with
+ * the pollable. |fd| indicates which fd to read from. If the call returns
+ * false the poller will exit its poll loop with a return code of |status|.
+ */
+ virtual bool onReadAvailable(int fd, int* status) = 0;
+ /* Called when an fd associated with the pollable is closed. |fd| indicates
+ * which fd was closed. If the call returns false the poller will exit its
+ * poll loop with a return code of |status|.
+ */
+ virtual bool onClose(int fd, int* status) = 0;
+ /* Called when the timeout returned by getPollData has been reached. If
+ * the call returns false the poller will exit its poll loop with a return
+ * code of |status|.
+ */
+ virtual bool onTimeout(int* status) = 0;
+};
+