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

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

Issue 896213002: Revert "Introduce optional 'bool shared' parameter to ServerSocket.bind() ..." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: 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 9e256d2e17317628f6b49aba8bc5456d8623f5f4..c54ef0726c9efb742e4c8fc3cc2c8a34b95fcf8f 100644
--- a/dart/runtime/bin/eventhandler_win.h
+++ b/dart/runtime/bin/eventhandler_win.h
@@ -29,6 +29,13 @@ 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.
@@ -154,7 +161,7 @@ class OverlappedBuffer {
// Abstract super class for holding information on listen and connected
// sockets.
-class Handle : public DescriptorInfoBase {
+class Handle {
public:
enum Type {
kFile,
@@ -218,6 +225,7 @@ class Handle : public DescriptorInfoBase {
EventHandlerImplementation* event_handler) = 0;
HANDLE handle() { return handle_; }
+ Dart_Port port() { return port_; }
void Lock();
void Unlock();
@@ -230,6 +238,10 @@ class Handle : public DescriptorInfoBase {
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 ||
@@ -238,6 +250,8 @@ class Handle : public DescriptorInfoBase {
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);
@@ -260,12 +274,15 @@ class Handle : public DescriptorInfoBase {
kError = 4
};
- explicit Handle(intptr_t handle);
+ explicit Handle(HANDLE handle);
+ Handle(HANDLE handle, Dart_Port port);
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_;
@@ -281,12 +298,12 @@ class Handle : public DescriptorInfoBase {
};
-class FileHandle : public DescriptorInfoSingleMixin<Handle> {
+class FileHandle : public Handle {
public:
explicit FileHandle(HANDLE handle)
- : DescriptorInfoSingleMixin(reinterpret_cast<intptr_t>(handle)) {
- type_ = kFile;
- }
+ : Handle(handle) { type_ = kFile; }
+ FileHandle(HANDLE handle, Dart_Port port)
+ : Handle(handle, port) { type_ = kFile; }
virtual void EnsureInitialized(EventHandlerImplementation* event_handler);
virtual bool IsClosed();
@@ -322,10 +339,10 @@ class StdHandle : public FileHandle {
};
-class DirectoryWatchHandle : public DescriptorInfoSingleMixin<Handle> {
+class DirectoryWatchHandle : public Handle {
public:
DirectoryWatchHandle(HANDLE handle, int events, bool recursive)
- : DescriptorInfoSingleMixin(reinterpret_cast<intptr_t>(handle)),
+ : Handle(handle),
events_(events),
recursive_(recursive) {
type_ = kDirectoryWatch;
@@ -349,8 +366,11 @@ class SocketHandle : public Handle {
SOCKET socket() const { return socket_; }
protected:
- explicit SocketHandle(intptr_t s)
- : Handle(s),
+ explicit SocketHandle(SOCKET s)
+ : Handle(reinterpret_cast<HANDLE>(s)),
+ socket_(s) {}
+ SocketHandle(SOCKET s, Dart_Port port)
+ : Handle(reinterpret_cast<HANDLE>(s), port),
socket_(s) {}
virtual void HandleIssueError();
@@ -361,14 +381,13 @@ class SocketHandle : public Handle {
// Information on listen sockets.
-class ListenSocket : public DescriptorInfoMultipleMixin<SocketHandle> {
+class ListenSocket : public SocketHandle {
public:
- explicit ListenSocket(intptr_t s) : DescriptorInfoMultipleMixin(s),
- AcceptEx_(NULL),
- pending_accept_count_(0),
- accepted_head_(NULL),
- accepted_tail_(NULL),
- accepted_count_(0) {
+ explicit ListenSocket(SOCKET s) : SocketHandle(s),
+ AcceptEx_(NULL),
+ pending_accept_count_(0),
+ accepted_head_(NULL),
+ accepted_tail_(NULL) {
type_ = kListenSocket;
}
virtual ~ListenSocket() {
@@ -393,32 +412,22 @@ class ListenSocket : public DescriptorInfoMultipleMixin<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 DescriptorInfoSingleMixin<SocketHandle> {
+class ClientSocket : public SocketHandle {
public:
- explicit ClientSocket(intptr_t s) : DescriptorInfoSingleMixin(s),
+ explicit ClientSocket(SOCKET s) : SocketHandle(s),
DisconnectEx_(NULL),
next_(NULL),
connected_(false),
@@ -427,6 +436,15 @@ class ClientSocket : public DescriptorInfoSingleMixin<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());
@@ -468,9 +486,9 @@ class ClientSocket : public DescriptorInfoSingleMixin<SocketHandle> {
};
-class DatagramSocket : public DescriptorInfoSingleMixin<SocketHandle> {
+class DatagramSocket : public SocketHandle {
public:
- explicit DatagramSocket(intptr_t s) : DescriptorInfoSingleMixin(s) {
+ explicit DatagramSocket(SOCKET s) : SocketHandle(s) {
type_ = kDatagramSocket;
}
@@ -505,7 +523,6 @@ 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