blob: 8ea5cb05b1d9adb5fe71037d54c3e35f7cebab4e [file] [log] [blame]
// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "shill/net/io_ready_handler.h"
#include <unistd.h>
#include <base/bind.h>
#include <base/logging.h>
namespace shill {
IOReadyHandler::IOReadyHandler(int fd,
ReadyMode mode,
const ReadyCallback& ready_callback)
: fd_(fd), ready_mode_(mode), ready_callback_(ready_callback) {}
IOReadyHandler::~IOReadyHandler() = default;
void IOReadyHandler::Start() {
switch (ready_mode_) {
case kModeInput:
watcher_ = base::FileDescriptorWatcher::WatchReadable(
fd_, base::BindRepeating(ready_callback_, fd_));
break;
case kModeOutput:
watcher_ = base::FileDescriptorWatcher::WatchWritable(
fd_, base::BindRepeating(ready_callback_, fd_));
break;
default:
LOG(FATAL) << "Unknown ready_mode_: " << ready_mode_;
}
LOG_IF(ERROR, !watcher_) << "Failed on watching fd";
}
void IOReadyHandler::Stop() {
watcher_ = nullptr;
}
} // namespace shill