OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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_SOCKET_H_ | 5 #ifndef BIN_SOCKET_H_ |
6 #define BIN_SOCKET_H_ | 6 #define BIN_SOCKET_H_ |
7 | 7 |
8 #if defined(DART_IO_DISABLED) | 8 #if defined(DART_IO_DISABLED) |
9 #error "socket.h can only be included on builds with IO enabled" | 9 #error "socket.h can only be included on builds with IO enabled" |
10 #endif | 10 #endif |
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 static void Initialize(); | 395 static void Initialize(); |
396 | 396 |
397 static ListeningSocketRegistry *Instance(); | 397 static ListeningSocketRegistry *Instance(); |
398 | 398 |
399 static void Cleanup(); | 399 static void Cleanup(); |
400 | 400 |
401 | 401 |
402 ListeningSocketRegistry() : mutex_(new Mutex()) {} | 402 ListeningSocketRegistry() : mutex_(new Mutex()) {} |
403 | 403 |
404 ~ListeningSocketRegistry() { | 404 ~ListeningSocketRegistry() { |
| 405 CloseAllSafe(); |
405 delete mutex_; | 406 delete mutex_; |
406 mutex_ = NULL; | 407 mutex_ = NULL; |
407 } | 408 } |
408 | 409 |
409 // This function should be called from a dart runtime call in order to create | 410 // This function should be called from a dart runtime call in order to create |
410 // a new (potentially shared) socket. | 411 // a new (potentially shared) socket. |
411 Dart_Handle CreateBindListen(Dart_Handle socket_object, | 412 Dart_Handle CreateBindListen(Dart_Handle socket_object, |
412 RawAddr addr, | 413 RawAddr addr, |
413 intptr_t backlog, | 414 intptr_t backlog, |
414 bool v6_only, | 415 bool v6_only, |
(...skipping 15 matching lines...) Expand all Loading... |
430 OSSocket *findOSSocketWithAddress(OSSocket *current, const RawAddr& addr) { | 431 OSSocket *findOSSocketWithAddress(OSSocket *current, const RawAddr& addr) { |
431 while (current != NULL) { | 432 while (current != NULL) { |
432 if (SocketAddress::AreAddressesEqual(current->address, addr)) { | 433 if (SocketAddress::AreAddressesEqual(current->address, addr)) { |
433 return current; | 434 return current; |
434 } | 435 } |
435 current = current->next; | 436 current = current->next; |
436 } | 437 } |
437 return NULL; | 438 return NULL; |
438 } | 439 } |
439 | 440 |
| 441 bool CloseOneSafe(OSSocket* os_socket); |
| 442 void CloseAllSafe(); |
| 443 |
| 444 // TODO(zra): Replace std::map with the HashMap in platform/hashmap.h. |
440 std::map<intptr_t, OSSocket*> sockets_by_port_; | 445 std::map<intptr_t, OSSocket*> sockets_by_port_; |
441 std::map<intptr_t, OSSocket*> sockets_by_fd_; | 446 std::map<intptr_t, OSSocket*> sockets_by_fd_; |
442 Mutex *mutex_; | 447 Mutex *mutex_; |
443 | 448 |
444 typedef std::map<intptr_t, OSSocket*>::iterator SocketsIterator; | 449 typedef std::map<intptr_t, OSSocket*>::iterator SocketsIterator; |
445 | 450 |
446 private: | 451 private: |
447 DISALLOW_COPY_AND_ASSIGN(ListeningSocketRegistry); | 452 DISALLOW_COPY_AND_ASSIGN(ListeningSocketRegistry); |
448 }; | 453 }; |
449 | 454 |
450 } // namespace bin | 455 } // namespace bin |
451 } // namespace dart | 456 } // namespace dart |
452 | 457 |
453 #endif // BIN_SOCKET_H_ | 458 #endif // BIN_SOCKET_H_ |
OLD | NEW |