2 using System.Threading;
4 using System.Net.Sockets;
7 namespace MonoTests.System.Net.Sockets
10 public class SocketAcceptAsyncTest
13 #if FEATURE_NO_BSD_SOCKETS
14 [ExpectedException (typeof (PlatformNotSupportedException))]
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;
26 ThreadPool.QueueUserWorkItem(_ =>
28 SocketAsyncEventArgs asyncEventArgs;
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;
40 } catch (Exception e) {
48 if (listenSocket.AcceptAsync(asyncEventArgs))
50 acceptedSocket = asyncEventArgs.AcceptSocket;
51 } catch (Exception e) {
57 Assert.IsTrue(readyEvent.WaitOne(1500));
61 var clientSocket = new Socket(
62 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
63 clientSocket.Connect(listenSocket.LocalEndPoint);
64 clientSocket.NoDelay = true;
66 Assert.IsTrue(mainEvent.WaitOne(1500));
67 Assert.AreEqual(serverSocket, acceptedSocket);
70 if (acceptedSocket != null)
71 acceptedSocket.Close();