Пример #1
0
        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);
                });
            }
        }
Пример #2
0
 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.");
     }
 }