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

Side by Side Diff: runtime/bin/eventhandler_win.h

Issue 9720045: Extend dart:io error handling to all socket functions (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments Created 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/bin/eventhandler_macos.cc ('k') | runtime/bin/eventhandler_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef BIN_EVENTHANDLER_WIN_H_ 5 #ifndef BIN_EVENTHANDLER_WIN_H_
6 #define BIN_EVENTHANDLER_WIN_H_ 6 #define BIN_EVENTHANDLER_WIN_H_
7 7
8 #if !defined(BIN_EVENTHANDLER_H_) 8 #if !defined(BIN_EVENTHANDLER_H_)
9 #error Do not include eventhandler_win.h directly; use eventhandler.h instead. 9 #error Do not include eventhandler_win.h directly; use eventhandler.h instead.
10 #endif 10 #endif
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 191
192 void MarkDoesNotSupportOverlappedIO() { 192 void MarkDoesNotSupportOverlappedIO() {
193 flags_ |= (1 << kDoesNotSupportOverlappedIO); 193 flags_ |= (1 << kDoesNotSupportOverlappedIO);
194 } 194 }
195 bool SupportsOverlappedIO() { 195 bool SupportsOverlappedIO() {
196 return (flags_ & (1 << kDoesNotSupportOverlappedIO)) == 0; 196 return (flags_ & (1 << kDoesNotSupportOverlappedIO)) == 0;
197 } 197 }
198 198
199 void ReadSyncCompleteAsync(); 199 void ReadSyncCompleteAsync();
200 200
201 DWORD last_error() { return last_error_; }
202 void set_last_error(DWORD last_error) { last_error_ = last_error; }
203
201 protected: 204 protected:
202 enum Flags { 205 enum Flags {
203 kClosing = 0, 206 kClosing = 0,
204 kCloseRead = 1, 207 kCloseRead = 1,
205 kCloseWrite = 2, 208 kCloseWrite = 2,
206 kDoesNotSupportOverlappedIO = 3 209 kDoesNotSupportOverlappedIO = 3
207 }; 210 };
208 211
209 explicit Handle(HANDLE handle); 212 explicit Handle(HANDLE handle);
210 Handle(HANDLE handle, Dart_Port port); 213 Handle(HANDLE handle, Dart_Port port);
211 214
212 virtual void AfterClose() = 0; 215 virtual void AfterClose() = 0;
213 216
214 Type type_; 217 Type type_;
215 HANDLE handle_; 218 HANDLE handle_;
216 Dart_Port port_; // Dart port to communicate events for this socket. 219 Dart_Port port_; // Dart port to communicate events for this socket.
217 intptr_t mask_; // Mask of events to report through the port. 220 intptr_t mask_; // Mask of events to report through the port.
218 HANDLE completion_port_; 221 HANDLE completion_port_;
219 EventHandlerImplementation* event_handler_; 222 EventHandlerImplementation* event_handler_;
220 223
221 IOBuffer* data_ready_; // IO buffer for data ready to be read. 224 IOBuffer* data_ready_; // IO buffer for data ready to be read.
222 IOBuffer* pending_read_; // IO buffer for pending read. 225 IOBuffer* pending_read_; // IO buffer for pending read.
223 IOBuffer* pending_write_; // IO buffer for pending write 226 IOBuffer* pending_write_; // IO buffer for pending write
224 227
228 DWORD last_error_;
229
225 private: 230 private:
226 int flags_; 231 int flags_;
227 CRITICAL_SECTION cs_; // Critical section protecting this object. 232 CRITICAL_SECTION cs_; // Critical section protecting this object.
228 }; 233 };
229 234
230 235
231 class FileHandle : public Handle { 236 class FileHandle : public Handle {
232 public: 237 public:
233 explicit FileHandle(HANDLE handle) 238 explicit FileHandle(HANDLE handle)
234 : Handle(reinterpret_cast<HANDLE>(handle)) { type_ = kFile; } 239 : Handle(reinterpret_cast<HANDLE>(handle)) { type_ = kFile; }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 virtual ~EventHandlerImplementation() {} 347 virtual ~EventHandlerImplementation() {}
343 348
344 void SendData(intptr_t id, Dart_Port dart_port, intptr_t data); 349 void SendData(intptr_t id, Dart_Port dart_port, intptr_t data);
345 void StartEventHandler(); 350 void StartEventHandler();
346 351
347 DWORD GetTimeout(); 352 DWORD GetTimeout();
348 void HandleInterrupt(InterruptMessage* msg); 353 void HandleInterrupt(InterruptMessage* msg);
349 void HandleTimeout(); 354 void HandleTimeout();
350 void HandleAccept(ListenSocket* listen_socket, IOBuffer* buffer); 355 void HandleAccept(ListenSocket* listen_socket, IOBuffer* buffer);
351 void HandleClosed(Handle* handle); 356 void HandleClosed(Handle* handle);
357 void HandleError(Handle* handle);
352 void HandleRead(Handle* handle, int bytes, IOBuffer* buffer); 358 void HandleRead(Handle* handle, int bytes, IOBuffer* buffer);
353 void HandleWrite(Handle* handle, int bytes, IOBuffer* buffer); 359 void HandleWrite(Handle* handle, int bytes, IOBuffer* buffer);
354 void HandleClose(ClientSocket* client_socket); 360 void HandleClose(ClientSocket* client_socket);
355 void HandleIOCompletion(DWORD bytes, ULONG_PTR key, OVERLAPPED* overlapped); 361 void HandleIOCompletion(DWORD bytes, ULONG_PTR key, OVERLAPPED* overlapped);
356 362
357 HANDLE completion_port() { return completion_port_; } 363 HANDLE completion_port() { return completion_port_; }
358 364
359 private: 365 private:
360 ClientSocket* client_sockets_head_; 366 ClientSocket* client_sockets_head_;
361 367
362 int64_t timeout_; // Time for next timeout. 368 int64_t timeout_; // Time for next timeout.
363 Dart_Port timeout_port_; 369 Dart_Port timeout_port_;
364 HANDLE completion_port_; 370 HANDLE completion_port_;
365 }; 371 };
366 372
367 373
368 #endif // BIN_EVENTHANDLER_WIN_H_ 374 #endif // BIN_EVENTHANDLER_WIN_H_
OLDNEW
« no previous file with comments | « runtime/bin/eventhandler_macos.cc ('k') | runtime/bin/eventhandler_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698