1 using System.Threading;
3 using System.Net.Sockets;
6 namespace MonoTests.System.Net.Sockets
9 public class SocketAcceptAsyncTest
12 #if FEATURE_NO_BSD_SOCKETS
13 [ExpectedException (typeof (PlatformNotSupportedException))]
15 public void AcceptAsyncShouldUseAcceptSocketFromEventArgs()
17 var readyEvent = new ManualResetEvent(false);
18 var mainEvent = new ManualResetEvent(false);
19 var listenSocket = new Socket(
20 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
21 var serverSocket = new Socket(
22 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
23 Socket acceptedSocket = null;
25 ThreadPool.QueueUserWorkItem(_ =>
27 SocketAsyncEventArgs asyncEventArgs;
29 listenSocket.Bind(new IPEndPoint(IPAddress.Loopback, 0));
30 listenSocket.Listen(1);
32 asyncEventArgs = new SocketAsyncEventArgs {AcceptSocket = serverSocket};
33 asyncEventArgs.Completed += (s, e) =>
35 acceptedSocket = e.AcceptSocket;
39 } catch (Exception e) {
47 if (listenSocket.AcceptAsync(asyncEventArgs))
49 acceptedSocket = asyncEventArgs.AcceptSocket;
50 } catch (Exception e) {
56 Assert.IsTrue(readyEvent.WaitOne(1500));
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);
69 if (acceptedSocket != null)
70 acceptedSocket.Close();