// Copyright (c) 2017, 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.

/// @assertion Datagram receive()
/// Receive a datagram.
/// . . .
/// The maximum length of the datagram that can be received is 65503 bytes.
///
/// @description Checks that the 65503 bytes datagram can be received.
/// @issue 31733
/// @author ngl@unipro.ru

import "dart:io";
import "../http_utils.dart";
import "../../../Utils/expect.dart";

var localhost = InternetAddress.loopbackIPv4;
int sentLength = 65503;

main() async {
  RawDatagramSocket producer = await RawDatagramSocket.bind(localhost, 0);
  RawDatagramSocket receiver = await RawDatagramSocket.bind(localhost, 0);
  List<int> sList = new List<int>.filled(sentLength, 0);
  for (int i = 0; i < sentLength; i++) {
    sList[i] = i & 0xff;
  }
  List<List<int>> toSend = [sList];
  bool sent = await sendDatagram(producer, toSend, localhost, receiver.port);
  Expect.isTrue(sent);

  List<List<int>> received = await receiveDatagram(receiver);
  if (received.length > 0) {
    Expect.listEquals(toSend, received);
  }
}
