| // Copyright (c) 2020, 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. |
| |
| // @dart = 2.9 |
| |
| import 'dart:io'; |
| |
| // Test that closing a large amount of servers will not lead to a stack |
| // overflow. |
| Future<void> main() async { |
| final max = 10000; |
| final servers = <ServerSocket>[]; |
| for (var i = 0; i < max; i++) { |
| final server = await ServerSocket.bind("localhost", 0); |
| server.listen((Socket socket) {}); |
| servers.add(server); |
| } |
| final client = HttpClient(); |
| var got = 0; |
| for (var i = 0; i < max; i++) { |
| new Future(() async { |
| try { |
| final request = await client |
| .getUrl(Uri.parse("http://localhost:${servers[i].port}/")); |
| got++; |
| if (got == max) { |
| // Test that no stack overflow happens. |
| client.close(force: true); |
| for (final server in servers) { |
| server.close(); |
| } |
| } |
| final response = await request.close(); |
| response.drain(); |
| } on HttpException catch (_) {} |
| }); |
| } |
| } |