9d5eb1140816690a5d1ab6c03e97b8a94935da32
[mono.git] / mcs / class / test-helpers / NetworkHelpers.cs
1 using System;
2 using System.Net;
3 using System.Net.Sockets;
4
5 namespace MonoTests.Helpers {
6
7         public static class NetworkHelpers
8         {
9                 static Random rndPort = new Random ();
10
11                 public static int FindFreePort ()
12                 {
13                         return LocalEphemeralEndPoint ().Port;
14                 }
15
16                 public static IPEndPoint LocalEphemeralEndPoint ()
17                 {
18                         while (true) {
19                                 var ep = new IPEndPoint (IPAddress.Loopback, rndPort.Next (10000, 60000));
20
21                                 try {
22                                         using (var socket = new Socket (ep.AddressFamily, SocketType.Stream, ProtocolType.Tcp)) {
23                                                 socket.Bind (ep);
24                                                 socket.Close ();
25                                         }
26                                         return ep;
27                                 } catch (SocketException) { }
28                         }
29                 }
30         }
31 }