| // 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_ |