[System] Fix tests that regressed in e6536dd.
[mono-project.git] / mcs / class / System / Test / System.Net.Sockets / SocketAcceptAsyncTest.cs
blobfff160c768c6e5dac98c6c2986e6c83140d74d95
1 using System;
2 using System.Threading;
3 using System.Net;
4 using System.Net.Sockets;
5 using NUnit.Framework;
7 namespace MonoTests.System.Net.Sockets
9 [TestFixture]
10 public class SocketAcceptAsyncTest
12 [Test]
13 #if FEATURE_NO_BSD_SOCKETS
14 [ExpectedException (typeof (PlatformNotSupportedException))]
15 #endif
16 public void AcceptAsyncShouldUseAcceptSocketFromEventArgs()
18 var readyEvent = new ManualResetEvent(false);
19 var mainEvent = new ManualResetEvent(false);
20 var listenSocket = new Socket(
21 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
22 var serverSocket = new Socket(
23 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
24 Socket acceptedSocket = null;
25 Exception ex = null;
26 ThreadPool.QueueUserWorkItem(_ =>
28 SocketAsyncEventArgs asyncEventArgs;
29 try {
30 listenSocket.Bind(new IPEndPoint(IPAddress.Loopback, 0));
31 listenSocket.Listen(1);
33 asyncEventArgs = new SocketAsyncEventArgs {AcceptSocket = serverSocket};
34 asyncEventArgs.Completed += (s, e) =>
36 acceptedSocket = e.AcceptSocket;
37 mainEvent.Set();
40 } catch (Exception e) {
41 ex = e;
42 return;
43 } finally {
44 readyEvent.Set();
47 try {
48 if (listenSocket.AcceptAsync(asyncEventArgs))
49 return;
50 acceptedSocket = asyncEventArgs.AcceptSocket;
51 mainEvent.Set();
52 } catch (Exception e) {
53 ex = e;
55 });
56 Assert.IsTrue(readyEvent.WaitOne(1500));
57 if (ex != null)
58 throw ex;
60 var clientSocket = new Socket(
61 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
62 clientSocket.Connect(listenSocket.LocalEndPoint);
63 clientSocket.NoDelay = true;
65 Assert.IsTrue(mainEvent.WaitOne(1500));
66 Assert.AreEqual(serverSocket, acceptedSocket, "x");
67 mainEvent.Reset();
69 if (acceptedSocket != null)
70 acceptedSocket.Close();
72 listenSocket.Close();
73 readyEvent.Close();
74 mainEvent.Close();