1 using System.Threading;
3 using System.Net.Sockets;
6 namespace MonoTests.System.Net.Sockets
9 public class SocketAcceptAsyncTest
12 public void AcceptAsyncShouldUseAcceptSocketFromEventArgs()
14 var readyEvent = new ManualResetEvent(false);
15 var mainEvent = new ManualResetEvent(false);
16 var listenSocket = new Socket(
17 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
18 var serverSocket = new Socket(
19 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
20 Socket acceptedSocket = null;
22 ThreadPool.QueueUserWorkItem(_ =>
24 listenSocket.Bind(new IPEndPoint(IPAddress.Loopback, 0));
25 listenSocket.Listen(1);
27 var asyncEventArgs = new SocketAsyncEventArgs {AcceptSocket = serverSocket};
28 asyncEventArgs.Completed += (s, e) =>
30 acceptedSocket = e.AcceptSocket;
36 if (listenSocket.AcceptAsync(asyncEventArgs))
38 acceptedSocket = asyncEventArgs.AcceptSocket;
41 Assert.IsTrue(readyEvent.WaitOne(1500));
43 var clientSocket = new Socket(
44 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
45 clientSocket.Connect(listenSocket.LocalEndPoint);
46 clientSocket.NoDelay = true;
48 Assert.IsTrue(mainEvent.WaitOne(1500));
49 Assert.AreEqual(serverSocket, acceptedSocket);
52 if (acceptedSocket != null)
53 acceptedSocket.Close();