1320543Sdim//===-- IOObject.h ----------------------------------------------*- C++ -*-===// 2320543Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6320543Sdim// 7320543Sdim//===----------------------------------------------------------------------===// 8320543Sdim 9320543Sdim#ifndef liblldb_Host_Common_IOObject_h_ 10320543Sdim#define liblldb_Host_Common_IOObject_h_ 11320543Sdim 12320543Sdim#include <stdarg.h> 13320543Sdim#include <stdio.h> 14320543Sdim#include <sys/types.h> 15320543Sdim 16320543Sdim#include "lldb/lldb-private.h" 17320543Sdim 18320543Sdimnamespace lldb_private { 19320543Sdim 20320543Sdimclass IOObject { 21320543Sdimpublic: 22353358Sdim enum FDType { 23320543Sdim eFDTypeFile, // Other FD requiring read/write 24320543Sdim eFDTypeSocket, // Socket requiring send/recv 25353358Sdim }; 26320543Sdim 27320543Sdim // TODO: On Windows this should be a HANDLE, and wait should use 28320543Sdim // WaitForMultipleObjects 29320543Sdim typedef int WaitableHandle; 30320543Sdim static const WaitableHandle kInvalidHandleValue; 31320543Sdim 32360784Sdim IOObject(FDType type) : m_fd_type(type) {} 33320543Sdim virtual ~IOObject(); 34320543Sdim 35320543Sdim virtual Status Read(void *buf, size_t &num_bytes) = 0; 36320543Sdim virtual Status Write(const void *buf, size_t &num_bytes) = 0; 37320543Sdim virtual bool IsValid() const = 0; 38320543Sdim virtual Status Close() = 0; 39320543Sdim 40320543Sdim FDType GetFdType() const { return m_fd_type; } 41320543Sdim 42320543Sdim virtual WaitableHandle GetWaitableHandle() = 0; 43320543Sdim 44320543Sdimprotected: 45320543Sdim FDType m_fd_type; 46320543Sdim 47320543Sdimprivate: 48320543Sdim DISALLOW_COPY_AND_ASSIGN(IOObject); 49320543Sdim}; 50320543Sdim} // namespace lldb_private 51320543Sdim 52320543Sdim#endif 53