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

Unified Diff: dart/runtime/bin/eventhandler_win.h

Issue 879353003: Introduce optional 'bool shared' parameter to ServerSocket.bind() ... (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed comments Created 5 years, 10 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
« no previous file with comments | « dart/runtime/bin/eventhandler_macos.cc ('k') | dart/runtime/bin/eventhandler_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/runtime/bin/eventhandler_win.h
diff --git a/dart/runtime/bin/eventhandler_win.h b/dart/runtime/bin/eventhandler_win.h
index c54ef0726c9efb742e4c8fc3cc2c8a34b95fcf8f..9e256d2e17317628f6b49aba8bc5456d8623f5f4 100644
--- a/dart/runtime/bin/eventhandler_win.h
+++ b/dart/runtime/bin/eventhandler_win.h
@@ -29,13 +29,6 @@ class ClientSocket;
class ListenSocket;
-struct InterruptMessage {
- intptr_t id;
- Dart_Port dart_port;
- int64_t data;
-};
-
-
// An OverlappedBuffer encapsulates the OVERLAPPED structure and the
// associated data buffer. For accept it also contains the pre-created
// socket for the client.
@@ -161,7 +154,7 @@ class OverlappedBuffer {
// Abstract super class for holding information on listen and connected
// sockets.
-class Handle {
+class Handle : public DescriptorInfoBase {
public:
enum Type {
kFile,
@@ -225,7 +218,6 @@ class Handle {
EventHandlerImplementation* event_handler) = 0;
HANDLE handle() { return handle_; }
- Dart_Port port() { return port_; }
void Lock();
void Unlock();
@@ -238,10 +230,6 @@ class Handle {
bool IsHandleClosed() const { return handle_ == INVALID_HANDLE_VALUE; }
- void SetPortAndMask(Dart_Port port, intptr_t mask) {
- port_ = port;
- mask_ = mask;
- }
Type type() { return type_; }
bool is_file() { return type_ == kFile; }
bool is_socket() { return type_ == kListenSocket ||
@@ -250,8 +238,6 @@ class Handle {
bool is_listen_socket() { return type_ == kListenSocket; }
bool is_client_socket() { return type_ == kClientSocket; }
bool is_datagram_socket() { return type_ == kDatagramSocket; }
- void set_mask(intptr_t mask) { mask_ = mask; }
- intptr_t mask() { return mask_; }
void MarkDoesNotSupportOverlappedIO() {
flags_ |= (1 << kDoesNotSupportOverlappedIO);
@@ -274,15 +260,12 @@ class Handle {
kError = 4
};
- explicit Handle(HANDLE handle);
- Handle(HANDLE handle, Dart_Port port);
+ explicit Handle(intptr_t handle);
virtual void HandleIssueError();
Type type_;
HANDLE handle_;
- Dart_Port port_; // Dart port to communicate events for this socket.
- intptr_t mask_; // Mask of events to report through the port.
HANDLE completion_port_;
EventHandlerImplementation* event_handler_;
@@ -298,12 +281,12 @@ class Handle {
};
-class FileHandle : public Handle {
+class FileHandle : public DescriptorInfoSingleMixin<Handle> {
public:
explicit FileHandle(HANDLE handle)
- : Handle(handle) { type_ = kFile; }
- FileHandle(HANDLE handle, Dart_Port port)
- : Handle(handle, port) { type_ = kFile; }
+ : DescriptorInfoSingleMixin(reinterpret_cast<intptr_t>(handle)) {
+ type_ = kFile;
+ }
virtual void EnsureInitialized(EventHandlerImplementation* event_handler);
virtual bool IsClosed();
@@ -339,10 +322,10 @@ class StdHandle : public FileHandle {
};
-class DirectoryWatchHandle : public Handle {
+class DirectoryWatchHandle : public DescriptorInfoSingleMixin<Handle> {
public:
DirectoryWatchHandle(HANDLE handle, int events, bool recursive)
- : Handle(handle),
+ : DescriptorInfoSingleMixin(reinterpret_cast<intptr_t>(handle)),
events_(events),
recursive_(recursive) {
type_ = kDirectoryWatch;
@@ -366,11 +349,8 @@ class SocketHandle : public Handle {
SOCKET socket() const { return socket_; }
protected:
- explicit SocketHandle(SOCKET s)
- : Handle(reinterpret_cast<HANDLE>(s)),
- socket_(s) {}
- SocketHandle(SOCKET s, Dart_Port port)
- : Handle(reinterpret_cast<HANDLE>(s), port),
+ explicit SocketHandle(intptr_t s)
+ : Handle(s),
socket_(s) {}
virtual void HandleIssueError();
@@ -381,13 +361,14 @@ class SocketHandle : public Handle {
// Information on listen sockets.
-class ListenSocket : public SocketHandle {
+class ListenSocket : public DescriptorInfoMultipleMixin<SocketHandle> {
public:
- explicit ListenSocket(SOCKET s) : SocketHandle(s),
- AcceptEx_(NULL),
- pending_accept_count_(0),
- accepted_head_(NULL),
- accepted_tail_(NULL) {
+ explicit ListenSocket(intptr_t s) : DescriptorInfoMultipleMixin(s),
+ AcceptEx_(NULL),
+ pending_accept_count_(0),
+ accepted_head_(NULL),
+ accepted_tail_(NULL),
+ accepted_count_(0) {
type_ = kListenSocket;
}
virtual ~ListenSocket() {
@@ -412,22 +393,32 @@ class ListenSocket : public SocketHandle {
int pending_accept_count() { return pending_accept_count_; }
+ int accepted_count() { return accepted_count_; }
+
private:
bool LoadAcceptEx();
LPFN_ACCEPTEX AcceptEx_;
+
+ // The number of asynchronous `IssueAccept` operations which haven't completed
+ // yet.
int pending_accept_count_;
+
// Linked list of accepted connections provided by completion code. Ready to
// be handed over through accept.
ClientSocket* accepted_head_;
ClientSocket* accepted_tail_;
+
+ // The number of accepted connections which are waiting to be removed from
+ // this queue and processed by dart isolates.
+ int accepted_count_;
};
// Information on connected sockets.
-class ClientSocket : public SocketHandle {
+class ClientSocket : public DescriptorInfoSingleMixin<SocketHandle> {
public:
- explicit ClientSocket(SOCKET s) : SocketHandle(s),
+ explicit ClientSocket(intptr_t s) : DescriptorInfoSingleMixin(s),
DisconnectEx_(NULL),
next_(NULL),
connected_(false),
@@ -436,15 +427,6 @@ class ClientSocket : public SocketHandle {
type_ = kClientSocket;
}
- ClientSocket(SOCKET s, Dart_Port port) : SocketHandle(s, port),
- DisconnectEx_(NULL),
- next_(NULL),
- connected_(false),
- closed_(false) {
- LoadDisconnectEx();
- type_ = kClientSocket;
- }
-
virtual ~ClientSocket() {
// Don't delete this object until all pending requests have been handled.
ASSERT(!HasPendingRead());
@@ -486,9 +468,9 @@ class ClientSocket : public SocketHandle {
};
-class DatagramSocket : public SocketHandle {
+class DatagramSocket : public DescriptorInfoSingleMixin<SocketHandle> {
public:
- explicit DatagramSocket(SOCKET s) : SocketHandle(s) {
+ explicit DatagramSocket(intptr_t s) : DescriptorInfoSingleMixin(s) {
type_ = kDatagramSocket;
}
@@ -523,6 +505,7 @@ class EventHandlerImplementation {
void HandleInterrupt(InterruptMessage* msg);
void HandleTimeout();
void HandleAccept(ListenSocket* listen_socket, OverlappedBuffer* buffer);
+ void TryDispatchingPendingAccepts(ListenSocket *listen_socket);
void HandleRead(Handle* handle, int bytes, OverlappedBuffer* buffer);
void HandleRecvFrom(Handle* handle, int bytes, OverlappedBuffer* buffer);
void HandleWrite(Handle* handle, int bytes, OverlappedBuffer* buffer);
« no previous file with comments | « dart/runtime/bin/eventhandler_macos.cc ('k') | dart/runtime/bin/eventhandler_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698