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