2 using System.Collections;
3 using System.Threading;
5 using System.Net.Sockets;
8 namespace MonoTests.System.Net.Sockets
11 public class SocketConnectAsyncTest
15 SocketAsyncEventArgs clientSocketAsyncArgs;
16 ManualResetEvent readyEvent;
17 ManualResetEvent mainEvent;
23 readyEvent = new ManualResetEvent (false);
24 mainEvent = new ManualResetEvent (false);
28 public void TearDown ()
38 ThreadPool.QueueUserWorkItem (_ => DoWork ());
39 readyEvent.WaitOne ();
44 if (serverSocket != null)
45 serverSocket.Close ();
50 serverSocket = new Socket (
51 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
52 serverSocket.Bind (new IPEndPoint (IPAddress.Loopback, 0));
53 serverSocket.Listen (1);
55 var async = new SocketAsyncEventArgs ();
56 async.Completed += (s,e) => OnAccepted (e);
60 if (!serverSocket.AcceptAsync (async))
64 void OnAccepted (SocketAsyncEventArgs e)
66 var acceptSocket = e.AcceptSocket;
71 [Category("NotWorking")]
72 public void Connect ()
76 EndPoint serverEndpoint = serverSocket.LocalEndPoint;
78 var m = new ManualResetEvent (false);
79 var e = new SocketAsyncEventArgs ();
81 clientSocket = new Socket (
82 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
83 clientSocketAsyncArgs = new SocketAsyncEventArgs();
84 clientSocketAsyncArgs.RemoteEndPoint = serverEndpoint;
85 clientSocketAsyncArgs.Completed += (s,o) => {
86 if (o.SocketError != SocketError.Success)
87 error = new SocketException ((int)o.SocketError);
90 bool res = clientSocket.ConnectAsync(clientSocketAsyncArgs);
92 if (!m.WaitOne (1500))
93 throw new TimeoutException ();
96 if (!mainEvent.WaitOne (1500))
97 throw new TimeoutException ();
106 // Try again to non-listening endpoint, expect error
109 clientSocket = new Socket (
110 AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
111 clientSocketAsyncArgs = new SocketAsyncEventArgs ();
112 clientSocketAsyncArgs.RemoteEndPoint = serverEndpoint;
113 clientSocketAsyncArgs.Completed += (s,o) => {
114 if (o.SocketError != SocketError.Success)
115 error = new SocketException ((int)o.SocketError);
118 res = clientSocket.ConnectAsync (clientSocketAsyncArgs);
120 if (!m.WaitOne (1500))
121 throw new TimeoutException ();
124 Assert.IsTrue (error != null, "Connect - no error");
125 SocketException socketException = (SocketException)error;
126 Assert.IsTrue(socketException.ErrorCode == (int)SocketError.ConnectionRefused);