internal void Listen(Socket so, Func <byte[], int, IPEndPoint, Task <bool> > socketListernCallback, Action <SocketError> errorcb) { #pragma warning disable CA2000 // Dispose objects before losing scope var se = GetSocketAsyncEventArgs(); #pragma warning restore CA2000 // Dispose objects before losing scope var ctx = new SocketRecvContext() { So = so, Buffer = new byte[4096], Offset = 0, Count = 4096, Callback = socketListernCallback, ErrorCallback = errorcb }; se.UserToken = ctx; se.SetBuffer(ctx.Buffer, ctx.Offset, ctx.Count - ctx.Offset); if (so.AddressFamily == AddressFamily.InterNetwork) { se.RemoteEndPoint = new IPEndPoint(IPAddress.Any, Definition.MulticastPort); } else { se.RemoteEndPoint = new IPEndPoint(IPAddress.IPv6Any, Definition.MulticastPort); } if (!so.ReceiveFromAsync(se)) { Task.Run(() => { Socket_Completed(null, se); }); } }
void ReceivMore(SocketRecvContext ctx, SocketAsyncEventArgs e) { try { e.UserToken = ctx; //ctx.Buffer = new byte[4096]; e.SetBuffer(ctx.Buffer, 0, ctx.Buffer.Length); if (ctx.So.AddressFamily == AddressFamily.InterNetwork) { e.RemoteEndPoint = new IPEndPoint(IPAddress.Any, Definition.MulticastPort); } else { e.RemoteEndPoint = new IPEndPoint(IPAddress.IPv6Any, Definition.MulticastPort); } if (!ctx.So.ReceiveFromAsync(e)) { Task.Run(() => { Socket_Completed(null, e); }); } } catch (Exception exception) { logger.LogError(exception, "Exception in UdpMulticastServer."); } }