| 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 patch class RawServerSocket { | 5 patch class RawServerSocket { |
| 6 /* patch */ static Future<RawServerSocket> bind(address, | 6 /* patch */ static Future<RawServerSocket> bind(address, |
| 7 int port, | 7 int port, |
| 8 {int backlog: 0, | 8 {int backlog: 0, |
| 9 bool v6Only: false, | 9 bool v6Only: false, |
| 10 bool shared: false}) { | 10 bool shared: false}) { |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 280 static const Duration _RETRY_DURATION_LOOPBACK = | 280 static const Duration _RETRY_DURATION_LOOPBACK = |
| 281 const Duration(milliseconds: 25); | 281 const Duration(milliseconds: 25); |
| 282 | 282 |
| 283 // Use default Map so we keep order. | 283 // Use default Map so we keep order. |
| 284 static Map<int, _NativeSocket> _sockets = new Map<int, _NativeSocket>(); | 284 static Map<int, _NativeSocket> _sockets = new Map<int, _NativeSocket>(); |
| 285 | 285 |
| 286 // Socket close state | 286 // Socket close state |
| 287 bool isClosed = false; | 287 bool isClosed = false; |
| 288 bool isClosing = false; | 288 bool isClosing = false; |
| 289 bool isClosedRead = false; | 289 bool isClosedRead = false; |
| 290 bool closedReadEventSent = false; |
| 290 bool isClosedWrite = false; | 291 bool isClosedWrite = false; |
| 291 Completer closeCompleter = new Completer.sync(); | 292 Completer closeCompleter = new Completer.sync(); |
| 292 | 293 |
| 293 // Handlers and receive port for socket events from the event handler. | 294 // Handlers and receive port for socket events from the event handler. |
| 294 final List eventHandlers = new List(EVENT_COUNT + 1); | 295 final List eventHandlers = new List(EVENT_COUNT + 1); |
| 295 RawReceivePort eventPort; | 296 RawReceivePort eventPort; |
| 296 bool flagsSent = false; | 297 bool flagsSent = false; |
| 297 | 298 |
| 298 // The type flags for this socket. | 299 // The type flags for this socket. |
| 299 final int typeFlags; | 300 final int typeFlags; |
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 687 return nativeGetRemotePeer()[1]; | 688 return nativeGetRemotePeer()[1]; |
| 688 } | 689 } |
| 689 | 690 |
| 690 InternetAddress get remoteAddress { | 691 InternetAddress get remoteAddress { |
| 691 var result = nativeGetRemotePeer()[0]; | 692 var result = nativeGetRemotePeer()[0]; |
| 692 var type = new InternetAddressType._from(result[0]); | 693 var type = new InternetAddressType._from(result[0]); |
| 693 return new _InternetAddress(result[1], null, result[2]); | 694 return new _InternetAddress(result[1], null, result[2]); |
| 694 } | 695 } |
| 695 | 696 |
| 696 void issueReadEvent() { | 697 void issueReadEvent() { |
| 698 if (closedReadEventSent) return; |
| 697 if (readEventIssued) return; | 699 if (readEventIssued) return; |
| 698 readEventIssued = true; | 700 readEventIssued = true; |
| 699 void issue() { | 701 void issue() { |
| 700 readEventIssued = false; | 702 readEventIssued = false; |
| 701 if (isClosing) return; | 703 if (isClosing) return; |
| 702 if (!sendReadEvents) return; | 704 if (!sendReadEvents) return; |
| 703 if (available == 0) { | 705 if (available == 0) { |
| 704 if (isClosedRead) { | 706 if (isClosedRead && !closedReadEventSent) { |
| 705 if (isClosedWrite) close(); | 707 if (isClosedWrite) close(); |
| 706 var handler = eventHandlers[CLOSED_EVENT]; | 708 var handler = eventHandlers[CLOSED_EVENT]; |
| 707 if (handler == null) return; | 709 if (handler == null) return; |
| 710 closedReadEventSent = true; |
| 708 handler(); | 711 handler(); |
| 709 } | 712 } |
| 710 return; | 713 return; |
| 711 } | 714 } |
| 712 var handler = eventHandlers[READ_EVENT]; | 715 var handler = eventHandlers[READ_EVENT]; |
| 713 if (handler == null) return; | 716 if (handler == null) return; |
| 714 readEventIssued = true; | 717 readEventIssued = true; |
| 715 handler(); | 718 handler(); |
| 716 scheduleMicrotask(issue); | 719 scheduleMicrotask(issue); |
| 717 } | 720 } |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 853 close(); | 856 close(); |
| 854 break; | 857 break; |
| 855 default: | 858 default: |
| 856 throw new ArgumentError(direction); | 859 throw new ArgumentError(direction); |
| 857 } | 860 } |
| 858 } | 861 } |
| 859 } | 862 } |
| 860 | 863 |
| 861 void shutdownWrite() { | 864 void shutdownWrite() { |
| 862 if (!isClosing && !isClosed) { | 865 if (!isClosing && !isClosed) { |
| 863 if (isClosedRead) { | 866 if (closedReadEventSent) { |
| 864 close(); | 867 close(); |
| 865 } else { | 868 } else { |
| 866 sendToEventHandler(1 << SHUTDOWN_WRITE_COMMAND); | 869 sendToEventHandler(1 << SHUTDOWN_WRITE_COMMAND); |
| 867 } | 870 } |
| 868 isClosedWrite = true; | 871 isClosedWrite = true; |
| 869 } | 872 } |
| 870 } | 873 } |
| 871 | 874 |
| 872 void shutdownRead() { | 875 void shutdownRead() { |
| 873 if (!isClosing && !isClosed) { | 876 if (!isClosing && !isClosed) { |
| (...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1343 error: zone.bindUnaryCallback((e) { | 1346 error: zone.bindUnaryCallback((e) { |
| 1344 _controller.addError(e); | 1347 _controller.addError(e); |
| 1345 _socket.close(); | 1348 _socket.close(); |
| 1346 }) | 1349 }) |
| 1347 ); | 1350 ); |
| 1348 } | 1351 } |
| 1349 | 1352 |
| 1350 factory _RawSocket._writePipe() { | 1353 factory _RawSocket._writePipe() { |
| 1351 var native = new _NativeSocket.pipe(); | 1354 var native = new _NativeSocket.pipe(); |
| 1352 native.isClosedRead = true; | 1355 native.isClosedRead = true; |
| 1356 native.closedReadEventSent = true; |
| 1353 return new _RawSocket(native); | 1357 return new _RawSocket(native); |
| 1354 } | 1358 } |
| 1355 | 1359 |
| 1356 factory _RawSocket._readPipe(int fd) { | 1360 factory _RawSocket._readPipe(int fd) { |
| 1357 var native = new _NativeSocket.pipe(); | 1361 var native = new _NativeSocket.pipe(); |
| 1358 native.isClosedWrite = true; | 1362 native.isClosedWrite = true; |
| 1359 if (fd != null) _getStdioHandle(native, fd); | 1363 if (fd != null) _getStdioHandle(native, fd); |
| 1360 var result = new _RawSocket(native); | 1364 var result = new _RawSocket(native); |
| 1361 result._isMacOSTerminalInput = | 1365 result._isMacOSTerminalInput = |
| 1362 Platform.isMacOS && | 1366 Platform.isMacOS && |
| (...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1964 String address, | 1968 String address, |
| 1965 List<int> in_addr, | 1969 List<int> in_addr, |
| 1966 int port) { | 1970 int port) { |
| 1967 return new Datagram( | 1971 return new Datagram( |
| 1968 data, | 1972 data, |
| 1969 new _InternetAddress(address, null, in_addr), | 1973 new _InternetAddress(address, null, in_addr), |
| 1970 port); | 1974 port); |
| 1971 } | 1975 } |
| 1972 | 1976 |
| 1973 String _socketsStats() => _SocketsObservatory.toJSON(); | 1977 String _socketsStats() => _SocketsObservatory.toJSON(); |
| OLD | NEW |