Files
sdk/tests/standalone/io/socket_info_ipv6_test.dart
T
Zichang Guo ed83a28d3e [dart:io] support Unix domain communications
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>
2020-03-23 03:51:40 +00:00

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();
}