Chromium Code Reviews| Index: runtime/bin/socket_patch.dart |
| diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart |
| index 59faecf0918c3ea10c5095c9c5acee4f079f2490..f771a63ed4f7f5760f3164092e42601e42bee177 100644 |
| --- a/runtime/bin/socket_patch.dart |
| +++ b/runtime/bin/socket_patch.dart |
| @@ -838,8 +838,8 @@ class _NativeSocket extends NativeFieldWrapperClass1 { |
| void returnTokens() { |
| if (eventPort != null && !isClosing && !isClosed) { |
| - if (tokens == 8) { |
| - // Return in batches of 8. |
| + if (tokens == 2) { |
|
Søren Gjesse
2014/04/25 12:24:44
Please add a constant for this.
Anders Johnsen
2014/05/01 11:34:50
Done.
|
| + // Return in batches of 2. |
| assert(tokens < (1 << FIRST_COMMAND)); |
| sendToEventHandler((1 << RETURN_TOKEN_COMMAND) | tokens); |
| tokens = 0; |
| @@ -1053,6 +1053,7 @@ class _NativeSocket extends NativeFieldWrapperClass1 { |
| nativeAccept(_NativeSocket socket) native "ServerSocket_Accept"; |
| int nativeGetPort() native "Socket_GetPort"; |
| List nativeGetRemotePeer() native "Socket_GetRemotePeer"; |
| + int nativeGetSocketId() native "Socket_GetSocketId"; |
| OSError nativeGetError() native "Socket_GetError"; |
| nativeGetOption(int option, int protocol) native "Socket_GetOption"; |
| bool nativeSetOption(int option, int protocol, value) |
| @@ -1147,6 +1148,38 @@ class _RawServerSocket extends Stream<RawSocket> |
| _resume(); |
| } |
| } |
| + |
| + RawServerSocketHandle clone() { |
| + var port = new ReceivePort(); |
| + port.first.then((sendPort) { |
| + sendPort.send( |
| + [_socket.nativeGetSocketId(), |
| + _socket.address, |
| + _socket.localPort]); |
| + port.close(); |
| + }); |
| + return new _RawServerSocketHandle(port.sendPort); |
| + } |
| +} |
| + |
| + |
| +class _RawServerSocketHandle implements RawServerSocketHandle { |
| + final SendPort _sendPort; |
| + |
| + _RawServerSocketHandle(this._sendPort); |
| + |
| + Future<RawServerSocket> acquire() { |
| + var port = new ReceivePort(); |
| + _sendPort.send(port.sendPort); |
| + return port.first.then((args) { |
| + port.close(); |
| + var native = new _NativeSocket.listen(); |
| + native.nativeSetSocketId(args[0]); |
| + native.address = args[1]; |
| + native.localPort = args[2]; |
| + return new _RawServerSocket(native); |
| + }); |
| + } |
| } |
| @@ -1307,6 +1340,18 @@ patch class ServerSocket { |
| } |
| } |
| + |
| +class _ServerSocketHandle implements ServerSocketHandle { |
| + final RawServerSocketHandle _rawHandle; |
| + |
| + _ServerSocketHandle(this._rawHandle); |
| + |
| + Future<ServerSocket> acquire() { |
| + return _rawHandle.acquire().then((raw) => new _ServerSocket(raw)); |
| + } |
| +} |
| + |
| + |
| class _ServerSocket extends Stream<Socket> |
| implements ServerSocket { |
| final _socket; |
| @@ -1337,6 +1382,10 @@ class _ServerSocket extends Stream<Socket> |
| InternetAddress get address => _socket.address; |
| Future close() => _socket.close().then((_) => this); |
| + |
| + ServerSocketHandle clone() { |
| + return new _ServerSocketHandle(_socket.clone()); |
| + } |
| } |