2 using System.Threading;
4 using System.Net.Sockets;
7 namespace MonoTests.System.Net.Sockets
10 public class SocketAcceptAsyncTest
12 private Socket _listenSocket;
13 private Socket _clientSocket;
14 private Socket _serverSocket;
15 private Socket _acceptedSocket;
16 private ManualResetEvent _readyEvent;
17 private ManualResetEvent _mainEvent;
22 _readyEvent = new ManualResetEvent(false);
23 _mainEvent = new ManualResetEvent(false);
25 ThreadPool.QueueUserWorkItem(_ => StartListen());
26 Assert.IsTrue(_readyEvent.WaitOne(1500));
28 _clientSocket = new Socket(
29 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
30 _clientSocket.Connect(_listenSocket.LocalEndPoint);
31 _clientSocket.NoDelay = true;
35 public void TearDown()
37 if (_acceptedSocket != null)
38 _acceptedSocket.Close();
39 if (_listenSocket != null)
40 _listenSocket.Close();
45 private void StartListen()
47 _listenSocket = new Socket(
48 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
49 _listenSocket.Bind(new IPEndPoint(IPAddress.Loopback, 0));
50 _listenSocket.Listen(1);
52 _serverSocket = new Socket(
53 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
55 var async = new SocketAsyncEventArgs();
56 async.AcceptSocket = _serverSocket;
57 async.Completed += (s, e) => OnAccepted(e);
61 if (!_listenSocket.AcceptAsync(async))
65 private void OnAccepted(SocketAsyncEventArgs e)
67 _acceptedSocket = e.AcceptSocket;
72 public void AcceptAsyncShouldUseAcceptSocketFromEventArgs()
74 Assert.IsTrue(_mainEvent.WaitOne(1500));
75 Assert.AreEqual(_serverSocket, _acceptedSocket);