diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2019-02-11 15:31:23 -0800 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-02-11 15:31:23 -0800 |
commit | dd7bd20e319cefbafc69f0748740864f12657f6c (patch) | |
tree | 8ee3cb35321655ad38530cd30c15ae99386e7544 /network/netmgr/pollable.h | |
parent | 4a61803e71e83d44f926048eb08ee9477779700c (diff) | |
parent | ae97ddcc37e8586a521106c4815fae588026c4c3 (diff) | |
download | android_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.h | 62 |
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; +}; + |