private Datagram GetDatagram(AsyncEnumeratorContext context) { return(new Datagram( context.Buffer.AsMemory(context.Offset, context.Length).ToArray(), context.EndPoint.Address.GetAddressBytes(), context.EndPoint.Port)); }
private Try <Datagram> TrySetContext(Try <Datagram> datagram, AsyncEnumeratorContext context) { if (datagram.IsException()) { return(datagram); } if (!datagram.Value.TryGetEndPoint(out var endPoint) && !datagram.Value.IsEndPointEmpty()) { return(new Try <Datagram>(CreateSocketException(SocketError.AddressNotAvailable, datagram.Value))); } context.EndPoint = endPoint; if (!datagram.Value.Buffer.TryCopyTo(context.Buffer)) { return(new Try <Datagram>(CreateSocketException(SocketError.MessageSize, datagram.Value))); } context.Length = datagram.Value.Buffer.Length; return(datagram); }
private async ValueTask ReceiveDatagramAsync(AsyncEnumeratorContext context) { var datagram = GetDatagram(context); await WriteToOutputAsync(new Try <Datagram>(datagram)); }