// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. #ifndef RUNTIME_BIN_SYNC_SOCKET_H_ #define RUNTIME_BIN_SYNC_SOCKET_H_ #include "bin/socket_base.h" #include "platform/globals.h" namespace dart { namespace bin { class SynchronousSocket { public: explicit SynchronousSocket(intptr_t fd) : fd_(fd) {} ~SynchronousSocket() { ASSERT(fd_ == kClosedFd); } intptr_t fd() const { return fd_; } void SetClosedFd() { fd_ = kClosedFd; } static bool Initialize(); static intptr_t CreateConnect(const RawAddr& addr); static Dart_Handle SetSocketIdNativeField(Dart_Handle handle, SynchronousSocket* socket); static Dart_Handle GetSocketIdNativeField(Dart_Handle socket_obj, SynchronousSocket** socket); static intptr_t Available(intptr_t fd); static intptr_t GetPort(intptr_t fd); static SocketAddress* GetRemotePeer(intptr_t fd, intptr_t* port); static intptr_t Read(intptr_t fd, void* buffer, intptr_t num_bytes); static intptr_t Write(intptr_t fd, const void* buffer, intptr_t num_bytes); static void ShutdownRead(intptr_t fd); static void ShutdownWrite(intptr_t fd); static void Close(intptr_t fd); private: static constexpr int kClosedFd = -1; intptr_t fd_; DISALLOW_COPY_AND_ASSIGN(SynchronousSocket); }; } // namespace bin } // namespace dart #endif // RUNTIME_BIN_SYNC_SOCKET_H_