Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(431)

Unified Diff: runtime/bin/socket_common.h

Issue 2780063002: Pulled a significant portion of Socket implementation into BaseSocket in order to prepare for the s… (Closed)
Patch Set: Updated copyright date, fixed incorrect items in socket_common_macos.h Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/bin/socket_common.h
diff --git a/runtime/bin/socket.h b/runtime/bin/socket_common.h
similarity index 66%
copy from runtime/bin/socket.h
copy to runtime/bin/socket_common.h
index 1afc05e58a3bfbd6ff6ee58365dbc21b17093b98..7357a63eb2f5b3b8ed8af39034ba6876f2e8b1ee 100644
--- a/runtime/bin/socket.h
+++ b/runtime/bin/socket_common.h
@@ -1,26 +1,26 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// 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_SOCKET_H_
-#define RUNTIME_BIN_SOCKET_H_
+#ifndef RUNTIME_BIN_SOCKET_COMMON_H_
+#define RUNTIME_BIN_SOCKET_COMMON_H_
#if defined(DART_IO_DISABLED)
-#error "socket.h can only be included on builds with IO enabled"
+#error "socket_common.h can only be included on builds with IO enabled"
#endif
#include "platform/globals.h"
// Declare the OS-specific types ahead of defining the generic class.
#if defined(TARGET_OS_ANDROID)
-#include "bin/socket_android.h"
+#include "bin/socket_common_android.h"
#elif defined(TARGET_OS_FUCHSIA)
-#include "bin/socket_fuchsia.h"
+#include "bin/socket_common_fuchsia.h"
#elif defined(TARGET_OS_LINUX)
-#include "bin/socket_linux.h"
+#include "bin/socket_common_linux.h"
#elif defined(TARGET_OS_MACOS)
-#include "bin/socket_macos.h"
+#include "bin/socket_common_macos.h"
#elif defined(TARGET_OS_WINDOWS)
-#include "bin/socket_win.h"
+#include "bin/socket_common_win.h"
#else
#error Unknown target os.
#endif
@@ -247,7 +247,7 @@ class AddressList {
};
-class Socket {
+class BaseSocket {
public:
enum SocketRequest {
kLookupRequest = 0,
@@ -270,19 +270,9 @@ class Socket {
void* buffer,
intptr_t num_bytes,
RawAddr* addr);
- // Creates a socket which is bound and connected. The port to connect to is
- // specified as the port component of the passed RawAddr structure.
- static intptr_t CreateConnect(const RawAddr& addr);
- // Creates a socket which is bound and connected. The port to connect to is
- // specified as the port component of the passed RawAddr structure.
- static intptr_t CreateBindConnect(const RawAddr& addr,
- const RawAddr& source_addr);
// Returns true if the given error-number is because the system was not able
// to bind the socket to a specific IP.
static bool IsBindError(intptr_t error_number);
- // Creates a datagram socket which is bound. The port to bind
- // to is specified as the port component of the RawAddr structure.
- static intptr_t CreateBindDatagram(const RawAddr& addr, bool reuseAddress);
static intptr_t GetPort(intptr_t fd);
static SocketAddress* GetRemotePeer(intptr_t fd, intptr_t* port);
static void GetError(intptr_t fd, OSError* os_error);
@@ -327,10 +317,6 @@ class Socket {
int type,
OSError** os_error);
- static CObject* LookupRequest(const CObjectArray& request);
- static CObject* ListInterfacesRequest(const CObjectArray& request);
- static CObject* ReverseLookupRequest(const CObjectArray& request);
-
static Dart_Port GetServicePort();
static void SetSocketIdNativeField(Dart_Handle socket, intptr_t id);
@@ -338,149 +324,10 @@ class Socket {
private:
DISALLOW_ALLOCATION();
- DISALLOW_IMPLICIT_CONSTRUCTORS(Socket);
-};
-
-
-class ServerSocket {
- public:
- static const intptr_t kTemporaryFailure = -2;
-
- static intptr_t Accept(intptr_t fd);
-
- // Creates a socket which is bound and listens. The port to listen on is
- // specified in the port component of the passed RawAddr structure.
- //
- // Returns a positive integer if the call is successful. In case of failure
- // it returns:
- //
- // -1: system error (errno set)
- // -5: invalid bindAddress
- static intptr_t CreateBindListen(const RawAddr& addr,
- intptr_t backlog,
- bool v6_only = false);
-
- // Start accepting on a newly created listening socket. If it was unable to
- // start accepting incoming sockets, the fd is invalidated.
- static bool StartAccept(intptr_t fd);
-
- private:
- DISALLOW_ALLOCATION();
- DISALLOW_IMPLICIT_CONSTRUCTORS(ServerSocket);
-};
-
-
-class ListeningSocketRegistry {
- public:
- ListeningSocketRegistry()
- : sockets_by_port_(SameIntptrValue, kInitialSocketsCount),
- sockets_by_fd_(SameIntptrValue, kInitialSocketsCount),
- mutex_(new Mutex()) {}
-
- ~ListeningSocketRegistry() {
- CloseAllSafe();
- delete mutex_;
- mutex_ = NULL;
- }
-
- static void Initialize();
-
- static ListeningSocketRegistry* Instance();
-
- static void Cleanup();
-
- // This function should be called from a dart runtime call in order to create
- // a new (potentially shared) socket.
- Dart_Handle CreateBindListen(Dart_Handle socket_object,
- RawAddr addr,
- intptr_t backlog,
- bool v6_only,
- bool shared);
-
- // This should be called from the event handler for every kCloseEvent it gets
- // on listening sockets.
- //
- // Returns `true` if the last reference has been dropped and the underlying
- // socket can be closed.
- //
- // The caller is responsible for obtaining the mutex first, before calling
- // this function.
- bool CloseSafe(intptr_t socketfd);
-
- Mutex* mutex() { return mutex_; }
-
- private:
- struct OSSocket {
- RawAddr address;
- int port;
- bool v6_only;
- bool shared;
- int ref_count;
- intptr_t socketfd;
-
- // Singly linked lists of OSSocket instances which listen on the same port
- // but on different addresses.
- OSSocket* next;
-
- OSSocket(RawAddr address,
- int port,
- bool v6_only,
- bool shared,
- intptr_t socketfd)
- : address(address),
- port(port),
- v6_only(v6_only),
- shared(shared),
- ref_count(0),
- socketfd(socketfd),
- next(NULL) {}
- };
-
- static const intptr_t kInitialSocketsCount = 8;
-
- OSSocket* findOSSocketWithAddress(OSSocket* current, const RawAddr& addr) {
- while (current != NULL) {
- if (SocketAddress::AreAddressesEqual(current->address, addr)) {
- return current;
- }
- current = current->next;
- }
- return NULL;
- }
-
- static bool SameIntptrValue(void* key1, void* key2) {
- return reinterpret_cast<intptr_t>(key1) == reinterpret_cast<intptr_t>(key2);
- }
-
- static uint32_t GetHashmapHashFromIntptr(intptr_t i) {
- return static_cast<uint32_t>((i + 1) & 0xFFFFFFFF);
- }
-
-
- static void* GetHashmapKeyFromIntptr(intptr_t i) {
- return reinterpret_cast<void*>(i + 1);
- }
-
- OSSocket* LookupByPort(intptr_t port);
- void InsertByPort(intptr_t port, OSSocket* socket);
- void RemoveByPort(intptr_t port);
-
- OSSocket* LookupByFd(intptr_t fd);
- void InsertByFd(intptr_t fd, OSSocket* socket);
- void RemoveByFd(intptr_t fd);
-
- bool CloseOneSafe(OSSocket* os_socket, bool update_hash_maps);
- void CloseAllSafe();
-
- HashMap sockets_by_port_;
- HashMap sockets_by_fd_;
-
- Mutex* mutex_;
-
- DISALLOW_COPY_AND_ASSIGN(ListeningSocketRegistry);
+ DISALLOW_IMPLICIT_CONSTRUCTORS(BaseSocket);
};
} // namespace bin
} // namespace dart
-#endif // RUNTIME_BIN_SOCKET_H_
+#endif // RUNTIME_BIN_SOCKET_COMMON_H_

Powered by Google App Engine
This is Rietveld 408576698