| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- using System;
- using System.Threading;
- using System.Net;
- using System.Net.Sockets;
- using NUnit.Framework;
- namespace MonoTests.System.Net.Sockets
- {
- [TestFixture]
- public class SocketAcceptAsyncTest
- {
- private Socket _listenSocket;
- private Socket _clientSocket;
- private Socket _serverSocket;
- private Socket _acceptedSocket;
- private ManualResetEvent _readyEvent;
- private ManualResetEvent _mainEvent;
- [TestFixtureSetUp]
- public void SetUp()
- {
- _readyEvent = new ManualResetEvent(false);
- _mainEvent = new ManualResetEvent(false);
- ThreadPool.QueueUserWorkItem(_ => StartListen());
- Assert.IsTrue(_readyEvent.WaitOne(1500));
- _clientSocket = new Socket(
- AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- _clientSocket.Connect(_listenSocket.LocalEndPoint);
- _clientSocket.NoDelay = true;
- }
- [TestFixtureTearDown]
- public void TearDown()
- {
- if (_acceptedSocket != null)
- _acceptedSocket.Close();
- if (_listenSocket != null)
- _listenSocket.Close();
- _readyEvent.Close();
- _mainEvent.Close();
- }
- private void StartListen()
- {
- _listenSocket = new Socket(
- AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- _listenSocket.Bind(new IPEndPoint(IPAddress.Loopback, 0));
- _listenSocket.Listen(1);
- _serverSocket = new Socket(
- AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- var async = new SocketAsyncEventArgs();
- async.AcceptSocket = _serverSocket;
- async.Completed += (s, e) => OnAccepted(e);
- _readyEvent.Set();
- if (!_listenSocket.AcceptAsync(async))
- OnAccepted(async);
- }
- private void OnAccepted(SocketAsyncEventArgs e)
- {
- _acceptedSocket = e.AcceptSocket;
- _mainEvent.Set();
- }
- [Test]
- public void AcceptAsyncShouldUseAcceptSocketFromEventArgs()
- {
- Assert.IsTrue(_mainEvent.WaitOne(1500));
- Assert.AreEqual(_serverSocket, _acceptedSocket);
- _mainEvent.Reset();
- }
- }
- }
|