public void ShouldCompleteAcceptTaskOnDispose() { Task task = _wrapper.Accept(socket => { }, exception => { }); _wrapper.Dispose(); Assert.DoesNotThrow(task.Wait); Assert.IsTrue(task.IsCompleted); }
private void Button_Click_1(object sender, RoutedEventArgs e) { if (serversRunning != 0) { return; } Interlocked.Increment(ref serversRunning); // Server start serverTaskMain = new Task(() => { // Server setup SocketWrapper[] listenSocketArr = new SocketWrapper[1]; uint q = SocketsWrapper.Socket(AddressFamily.QCC_AF_INET, SocketType.QCC_SOCK_STREAM, listenSocketArr); SocketWrapper listenSocket = listenSocketArr[0]; q = listenSocket.Bind("0.0.0.0", Port); q = listenSocket.Listen(10); for (int s = 0; s < Servers; s++) { if (s != 0) { Interlocked.Increment(ref serversRunning); } _serverTasks[s] = new Task(() => { string[] remoteAddr = new string[1]; int[] remotePort = new int[1]; SocketWrapper[] newSocketArr = new SocketWrapper[1]; while (listenSocket.Accept(remoteAddr, remotePort, newSocketArr) == 0) { int bytesLeft = PatternLength; int byteCount = 0; using (SocketWrapper newSocket = newSocketArr[0]) { int[] sentArr = new int[1]; while (bytesLeft != 0) { byte[] tempBytes = new byte[Math.Min(bytesLeft, MaxSendBuffer)]; for (int i = 0; i < tempBytes.Length; i++) { tempBytes[i] = (byte)((i + byteCount) % 256); } q = newSocket.Send(tempBytes, tempBytes.Length, sentArr); if (q != 0) { break; } byteCount += sentArr[0]; bytesLeft -= sentArr[0]; } } } Interlocked.Decrement(ref serversRunning); }); _serverTasks[s].Start(); } }); serverTaskMain.Start(); }