// 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.

// @dart = 2.9

/// @assertion int multicastHops
/// Set or get, the maximum network hops for multicast packages originating from
/// this socket.
///
/// For IPv4 this is referred to as TTL (time to live).
///
/// By default this value is 1 causing multicast traffic to stay on the local
/// network.
///
/// @description Checks that multicastHops property may be get and set for the
/// RawDatagramSocket instance with an internet address used in a host parameter
/// of bind method.
/// @author ngl@unipro.ru

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

check(InternetAddress address) {
  asyncStart();
  RawDatagramSocket.bind(address, 0).then((socket) {
    var v1 = socket.multicastHops;
    socket.multicastHops = ++v1;
    Expect.equals(v1, socket.multicastHops);
    socket.close();
    asyncEnd();
  });
}

main() {
  check(InternetAddress.anyIPv4);
  check(InternetAddress.anyIPv6);
  check(InternetAddress.loopbackIPv4);
  check(InternetAddress.loopbackIPv6);
}
