public void TestSocketFlags() { // Default value. var awaitable = new SocketAwaitable(); Assert.AreEqual(awaitable.SocketFlags, SocketFlags.None); // Assign value. awaitable.SocketFlags = SocketFlags.Broadcast; Assert.AreEqual(awaitable.SocketFlags, SocketFlags.Broadcast); // Clear awaitable. awaitable.Clear(); Assert.AreEqual(awaitable.SocketFlags, SocketFlags.None); }
public void TestRemoteEndPoint() { // Default value. var awaitable = new SocketAwaitable(); Assert.IsNull(awaitable.RemoteEndPoint); // Assign value. var endPoint = new IPEndPoint(IPAddress.Loopback, IPEndPoint.MaxPort); awaitable.RemoteEndPoint = endPoint; Assert.AreSame(awaitable.RemoteEndPoint, endPoint); // Clear awaitable. awaitable.Clear(); Assert.IsNull(awaitable.RemoteEndPoint); }
public void TestBuffer() { // Default buffer values. var awaitable = new SocketAwaitable(); Assert.IsNotNull(awaitable.Buffer.Array); Assert.AreEqual(awaitable.Buffer.Array.Length, 0); Assert.AreEqual(awaitable.Buffer.Offset, 0); Assert.AreEqual(awaitable.Buffer.Count, 0); // Default transferred values. Assert.IsNotNull(awaitable.Transferred.Array); Assert.AreEqual(awaitable.Transferred.Array.Length, 0); Assert.AreEqual(awaitable.Transferred.Offset, 0); Assert.AreEqual(awaitable.Transferred.Count, 0); // Assign a null buffer. var nullBuffer = default(ArraySegment <byte>); Assert.IsNull(nullBuffer.Array); awaitable.Buffer = nullBuffer; Assert.IsNotNull(awaitable.Buffer.Array); Assert.AreEqual(awaitable.Buffer.Array.Length, 0); Assert.AreEqual(awaitable.Buffer.Offset, 0); Assert.AreEqual(awaitable.Buffer.Count, 0); // Assign a valid buffer. var data = new byte[32]; var buffer = new ArraySegment <byte>(data, 8, 16); awaitable.Buffer = buffer; Assert.AreSame(awaitable.Buffer.Array, data); Assert.AreEqual(awaitable.Buffer.Offset, buffer.Offset); Assert.AreEqual(awaitable.Buffer.Count, buffer.Count); // Clear awaitable. awaitable.Clear(); Assert.IsNotNull(awaitable.Buffer.Array); Assert.AreEqual(awaitable.Buffer.Array.Length, 0); Assert.AreEqual(awaitable.Buffer.Offset, 0); Assert.AreEqual(awaitable.Buffer.Count, 0); }
private async Task ListenerHandler() { listener.Listen(int.MaxValue); while (!isStopped) { SocketAwaitable socketAwaitable = null; ArraySegment <byte> buffer = new ArraySegment <byte>(); try { socketAwaitable = socketAwaitablePool.Take(); socketAwaitable.Clear(); buffer = bufferManager.GetBuffer(); socketAwaitable.Buffer = buffer; var result = await listener.AcceptAsync(socketAwaitable); if (result != SocketError.Success || socketAwaitable.AcceptSocket == null) { if (logger.IsDebugEnabled) { logger.Debug("Received error when accepting connection result[{0}]", result); } continue; } var socket = socketAwaitable.AcceptSocket; logger.Info("Received connection from {0}", socket.RemoteEndPoint.ToString()); socket.NoDelay = true; socket.SendTimeout = 1000; var session = socketSessionFactory.CreateAsyncSocketSession(socket.RemoteEndPoint.ToString(), socket); session.PacketMaker.Append(socketAwaitable.Transferred); Add(session); } catch (SocketException e) { logger.Info(e, "SocketException in ListenerHandler. Ignoring..."); continue; } catch (Exception e) { logger.Warn(e, "Exception in ListenerHandler"); throw; } finally { if (socketAwaitable != null) { socketAwaitable.Clear(); socketAwaitablePool.Add(socketAwaitable); } if (buffer.Array != null) { bufferManager.ReleaseBuffer(buffer); } } } }