ed83a28d3e
Support Unix domain sockets communication on Linux, MacOS and Android.
Changes:
1. Add a field for InternetAddressType named unix.
2. Constructor of InternetAddress gains one more optional field: type. InternetAddress(String address, {InternetAddressType type});
3. Add another constructor to InternetAddress which taks raw address/path for ip/unix addresses as an argument. InternetAddress.fromRawAddress(Uint8List rawAddress, {InternetAddressType type});
The operation for unix domain sockets communication is basically the same as normal sockets except an InternetAddress with type unix should be passed.
Change-Id: I6a1135bbdd7f4e4fc745ccf8f95dec5272b6839b
Bug: https://github.com/dart-lang/sdk/issues/21403
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/125932
Commit-Queue: Zichang Guo <zichangguo@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
62 lines
2.1 KiB
Dart
62 lines
2.1 KiB
Dart
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
import "dart:async";
|
|
import "dart:io";
|
|
import "dart:typed_data";
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
void testHostAndPort() {
|
|
ServerSocket.bind("::1", 0).then((server) {
|
|
Socket.connect("::1", server.port).then((clientSocket) {
|
|
server.listen((socket) {
|
|
Expect.equals(socket.port, server.port);
|
|
Expect.equals(clientSocket.port, socket.remotePort);
|
|
Expect.equals(clientSocket.remotePort, socket.port);
|
|
Expect.equals(socket.remoteAddress.address, "::1");
|
|
Expect.equals(socket.remoteAddress.type, InternetAddressType.IPv6);
|
|
Expect.listEquals(socket.remoteAddress.rawAddress,
|
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
|
|
Expect.equals(clientSocket.remoteAddress.address, "::1");
|
|
Expect.equals(
|
|
clientSocket.remoteAddress.type, InternetAddressType.IPv6);
|
|
Expect.listEquals(clientSocket.remoteAddress.rawAddress,
|
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
|
|
socket.destroy();
|
|
clientSocket.destroy();
|
|
server.close();
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
Future<void> testRawAddress() async {
|
|
var list =
|
|
Uint8List.fromList([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
|
|
var addr = '::1';
|
|
var address = InternetAddress.fromRawAddress(list);
|
|
Expect.equals(address.address, addr);
|
|
var server = await ServerSocket.bind(address, 0);
|
|
var client = await Socket.connect(address, server.port);
|
|
var completer = Completer<void>();
|
|
server.listen((socket) async {
|
|
Expect.equals(socket.port, server.port);
|
|
Expect.equals(client.port, socket.remotePort);
|
|
Expect.equals(client.remotePort, socket.port);
|
|
|
|
Expect.equals(client.remoteAddress, address);
|
|
socket.destroy();
|
|
client.destroy();
|
|
await server.close();
|
|
completer.complete();
|
|
});
|
|
await completer.future;
|
|
}
|
|
|
|
void main() async {
|
|
testHostAndPort();
|
|
await testRawAddress();
|
|
}
|