1 using System.Threading;
3 using System.Net.Sockets;
6 namespace MonoTests.System.Net.Sockets
9 [Category ("RequiresBSDSockets")]
10 public class SocketAcceptAsyncTest
13 public void AcceptAsyncShouldUseAcceptSocketFromEventArgs()
15 var readyEvent = new ManualResetEvent(false);
16 var mainEvent = new ManualResetEvent(false);
17 var listenSocket = new Socket(
18 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
19 var serverSocket = new Socket(
20 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
21 Socket acceptedSocket = null;
23 ThreadPool.QueueUserWorkItem(_ =>
25 listenSocket.Bind(new IPEndPoint(IPAddress.Loopback, 0));
26 listenSocket.Listen(1);
28 var asyncEventArgs = new SocketAsyncEventArgs {AcceptSocket = serverSocket};
29 asyncEventArgs.Completed += (s, e) =>
31 acceptedSocket = e.AcceptSocket;
37 if (listenSocket.AcceptAsync(asyncEventArgs))
39 acceptedSocket = asyncEventArgs.AcceptSocket;
42 Assert.IsTrue(readyEvent.WaitOne(1500));
44 var clientSocket = new Socket(
45 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
46 clientSocket.Connect(listenSocket.LocalEndPoint);
47 clientSocket.NoDelay = true;
49 Assert.IsTrue(mainEvent.WaitOne(1500));
50 Assert.AreEqual(serverSocket, acceptedSocket);
53 if (acceptedSocket != null)
54 acceptedSocket.Close();