예제 #1
0
        public async Task ObtainIPAddressAsync()
        {
            string ip = RefImplementation();

            NetworkAddressState state = await SimpleTCPHelper.GetActiveIPv4AddressAsync();

            Assert.AreEqual(ip, state.Address.ToString());
        }
예제 #2
0
        /// <summary>
        /// Returns active IPv4 Address of this computer
        /// </summary>
        public static async Task <NetworkAddressState> GetActiveIPv4AddressAsync(int timeoutMs = 2000)
        {
            using Socket socket = new(AddressFamily.InterNetwork, SocketType.Dgram, 0);

            Task timeout = Task.Delay(timeoutMs);

            try {
                await Task.WhenAny(timeout, socket.ConnectAsync("8.8.8.8", 80));
            }
            catch (SocketException) {
                return(NetworkAddressState.Fail());
            }

            return(timeout.IsCompleted ? NetworkAddressState.Fail() : NetworkAddressState.Connected(((IPEndPoint)socket.LocalEndPoint).Address));
        }