| 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 return _RawServerSocket.bind(address, port, backlog, v6Only); | 10 bool reusePort: false}) { |
| 11 return _RawServerSocket.bind(address, port, backlog, v6Only, reusePort); |
| 11 } | 12 } |
| 12 } | 13 } |
| 13 | 14 |
| 14 | 15 |
| 15 patch class RawSocket { | 16 patch class RawSocket { |
| 16 /* patch */ static Future<RawSocket> connect(host, int port) { | 17 /* patch */ static Future<RawSocket> connect(host, int port) { |
| 17 return _RawSocket.connect(host, port); | 18 return _RawSocket.connect(host, port); |
| 18 } | 19 } |
| 19 } | 20 } |
| 20 | 21 |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 ); | 313 ); |
| 313 socket.setListening(read: false, write: true); | 314 socket.setListening(read: false, write: true); |
| 314 return completer.future; | 315 return completer.future; |
| 315 } | 316 } |
| 316 }); | 317 }); |
| 317 } | 318 } |
| 318 | 319 |
| 319 static Future<_NativeSocket> bind(host, | 320 static Future<_NativeSocket> bind(host, |
| 320 int port, | 321 int port, |
| 321 int backlog, | 322 int backlog, |
| 322 bool v6Only) { | 323 bool v6Only, |
| 324 bool reusePort) { |
| 323 return new Future.value(host) | 325 return new Future.value(host) |
| 324 .then((host) { | 326 .then((host) { |
| 325 if (host is _InternetAddress) return host; | 327 if (host is _InternetAddress) return host; |
| 326 return lookup(host) | 328 return lookup(host) |
| 327 .then((list) { | 329 .then((list) { |
| 328 if (list.length == 0) { | 330 if (list.length == 0) { |
| 329 throw createError(response, "Failed host lookup: '$host'"); | 331 throw createError(response, "Failed host lookup: '$host'"); |
| 330 } | 332 } |
| 331 return list[0]; | 333 return list[0]; |
| 332 }); | 334 }); |
| 333 }) | 335 }) |
| 334 .then((address) { | 336 .then((address) { |
| 335 var socket = new _NativeSocket.listen(); | 337 var socket = new _NativeSocket.listen(); |
| 336 socket.address = address; | 338 socket.address = address; |
| 337 var result = socket.nativeCreateBindListen(address._sockaddr_storage, | 339 var result = socket.nativeCreateBindListen(address._sockaddr_storage, |
| 338 port, | 340 port, |
| 339 backlog, | 341 backlog, |
| 340 v6Only); | 342 v6Only, |
| 343 reusePort); |
| 341 if (result is OSError) { | 344 if (result is OSError) { |
| 342 throw new SocketException("Failed to create server socket", | 345 throw new SocketException("Failed to create server socket", |
| 343 osError: result, | 346 osError: result, |
| 344 address: address, | 347 address: address, |
| 345 port: port); | 348 port: port); |
| 346 } | 349 } |
| 347 if (port != 0) socket.localPort = port; | 350 if (port != 0) socket.localPort = port; |
| 348 return socket; | 351 return socket; |
| 349 }); | 352 }); |
| 350 } | 353 } |
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 648 return nativeSetOption(option._value, enabled); | 651 return nativeSetOption(option._value, enabled); |
| 649 } | 652 } |
| 650 | 653 |
| 651 void nativeSetSocketId(int id) native "Socket_SetSocketId"; | 654 void nativeSetSocketId(int id) native "Socket_SetSocketId"; |
| 652 nativeAvailable() native "Socket_Available"; | 655 nativeAvailable() native "Socket_Available"; |
| 653 nativeRead(int len) native "Socket_Read"; | 656 nativeRead(int len) native "Socket_Read"; |
| 654 nativeWrite(List<int> buffer, int offset, int bytes) | 657 nativeWrite(List<int> buffer, int offset, int bytes) |
| 655 native "Socket_WriteList"; | 658 native "Socket_WriteList"; |
| 656 nativeCreateConnect(List<int> addr, | 659 nativeCreateConnect(List<int> addr, |
| 657 int port) native "Socket_CreateConnect"; | 660 int port) native "Socket_CreateConnect"; |
| 658 nativeCreateBindListen(List<int> addr, int port, int backlog, bool v6Only) | 661 nativeCreateBindListen( |
| 662 List<int> addr, int port, int backlog, bool v6Only, bool reusePort) |
| 659 native "ServerSocket_CreateBindListen"; | 663 native "ServerSocket_CreateBindListen"; |
| 660 nativeAccept(_NativeSocket socket) native "ServerSocket_Accept"; | 664 nativeAccept(_NativeSocket socket) native "ServerSocket_Accept"; |
| 661 int nativeGetPort() native "Socket_GetPort"; | 665 int nativeGetPort() native "Socket_GetPort"; |
| 662 List nativeGetRemotePeer() native "Socket_GetRemotePeer"; | 666 List nativeGetRemotePeer() native "Socket_GetRemotePeer"; |
| 663 OSError nativeGetError() native "Socket_GetError"; | 667 OSError nativeGetError() native "Socket_GetError"; |
| 664 bool nativeSetOption(int option, bool enabled) native "Socket_SetOption"; | 668 bool nativeSetOption(int option, bool enabled) native "Socket_SetOption"; |
| 665 } | 669 } |
| 666 | 670 |
| 667 | 671 |
| 668 class _RawServerSocket extends Stream<RawSocket> | 672 class _RawServerSocket extends Stream<RawSocket> |
| 669 implements RawServerSocket { | 673 implements RawServerSocket { |
| 670 final _NativeSocket _socket; | 674 final _NativeSocket _socket; |
| 671 StreamController<RawSocket> _controller; | 675 StreamController<RawSocket> _controller; |
| 672 | 676 |
| 673 static Future<_RawServerSocket> bind(address, | 677 static Future<_RawServerSocket> bind(address, |
| 674 int port, | 678 int port, |
| 675 int backlog, | 679 int backlog, |
| 676 bool v6Only) { | 680 bool v6Only, |
| 681 bool reusePort) { |
| 677 if (port < 0 || port > 0xFFFF) | 682 if (port < 0 || port > 0xFFFF) |
| 678 throw new ArgumentError("Invalid port $port"); | 683 throw new ArgumentError("Invalid port $port"); |
| 679 if (backlog < 0) throw new ArgumentError("Invalid backlog $backlog"); | 684 if (backlog < 0) throw new ArgumentError("Invalid backlog $backlog"); |
| 680 return _NativeSocket.bind(address, port, backlog, v6Only) | 685 return _NativeSocket.bind(address, port, backlog, v6Only, reusePort) |
| 681 .then((socket) => new _RawServerSocket(socket)); | 686 .then((socket) => new _RawServerSocket(socket)); |
| 682 } | 687 } |
| 683 | 688 |
| 684 _RawServerSocket(this._socket) { | 689 _RawServerSocket(this._socket) { |
| 685 _controller = new StreamController(sync: true, | 690 _controller = new StreamController(sync: true, |
| 686 onListen: _onSubscriptionStateChange, | 691 onListen: _onSubscriptionStateChange, |
| 687 onCancel: _onSubscriptionStateChange, | 692 onCancel: _onSubscriptionStateChange, |
| 688 onPause: _onPauseStateChange, | 693 onPause: _onPauseStateChange, |
| 689 onResume: _onPauseStateChange); | 694 onResume: _onPauseStateChange); |
| 690 _socket.closeFuture.then((_) => _controller.close()); | 695 _socket.closeFuture.then((_) => _controller.close()); |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 close(); | 891 close(); |
| 887 } | 892 } |
| 888 } | 893 } |
| 889 } | 894 } |
| 890 | 895 |
| 891 | 896 |
| 892 patch class ServerSocket { | 897 patch class ServerSocket { |
| 893 /* patch */ static Future<ServerSocket> bind(address, | 898 /* patch */ static Future<ServerSocket> bind(address, |
| 894 int port, | 899 int port, |
| 895 {int backlog: 0, | 900 {int backlog: 0, |
| 896 bool v6Only: false}) { | 901 bool v6Only: false, |
| 897 return _ServerSocket.bind(address, port, backlog, v6Only); | 902 bool reusePort: false}) { |
| 903 return _ServerSocket.bind(address, port, backlog, v6Only, reusePort); |
| 898 } | 904 } |
| 899 } | 905 } |
| 900 | 906 |
| 901 class _ServerSocket extends Stream<Socket> | 907 class _ServerSocket extends Stream<Socket> |
| 902 implements ServerSocket { | 908 implements ServerSocket { |
| 903 final _socket; | 909 final _socket; |
| 904 | 910 |
| 905 static Future<_ServerSocket> bind(address, | 911 static Future<_ServerSocket> bind(address, |
| 906 int port, | 912 int port, |
| 907 int backlog, | 913 int backlog, |
| 908 bool v6Only) { | 914 bool v6Only, |
| 909 return _RawServerSocket.bind(address, port, backlog, v6Only) | 915 bool reusePort) { |
| 916 return _RawServerSocket.bind(address, port, backlog, v6Only, reusePort) |
| 910 .then((socket) => new _ServerSocket(socket)); | 917 .then((socket) => new _ServerSocket(socket)); |
| 911 } | 918 } |
| 912 | 919 |
| 913 _ServerSocket(this._socket); | 920 _ServerSocket(this._socket); |
| 914 | 921 |
| 915 StreamSubscription<Socket> listen(void onData(Socket event), | 922 StreamSubscription<Socket> listen(void onData(Socket event), |
| 916 {void onError(error), | 923 {void onError(error), |
| 917 void onDone(), | 924 void onDone(), |
| 918 bool cancelOnError}) { | 925 bool cancelOnError}) { |
| 919 return _socket.map((rawSocket) => new _Socket(rawSocket)).listen( | 926 return _socket.map((rawSocket) => new _Socket(rawSocket)).listen( |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1215 if (_detachReady != null) { | 1222 if (_detachReady != null) { |
| 1216 _detachReady.complete(null); | 1223 _detachReady.complete(null); |
| 1217 } else { | 1224 } else { |
| 1218 if (_raw != null) { | 1225 if (_raw != null) { |
| 1219 _raw.shutdown(SocketDirection.SEND); | 1226 _raw.shutdown(SocketDirection.SEND); |
| 1220 _disableWriteEvent(); | 1227 _disableWriteEvent(); |
| 1221 } | 1228 } |
| 1222 } | 1229 } |
| 1223 } | 1230 } |
| 1224 } | 1231 } |
| OLD | NEW |