public static NngResult <ISendReceiveAsyncContext <T> > Create(IMessageFactory <T> factory, ISocket socket) { var context = new SendReceiveAsyncContext <T> { Factory = factory, Socket = socket }; var res = context.InitAio(); return(NngResult <ISendReceiveAsyncContext <T> > .OkIfZero(res, context)); }
public NngResult <UIntPtr> Recv(ref IMemory buffer, Defines.NngFlag flags = default) { if (flags.HasFlag(Defines.NngFlag.NNG_FLAG_ALLOC)) { var res = RecvZeroCopy(flags); return(res.Into <UIntPtr>(() => res.Ok().Length)); } else { if (buffer == null || buffer.Length == UIntPtr.Zero) { return(NngResult <UIntPtr> .Err(Defines.NngErrno.EMSGSIZE)); } var ptr = buffer.Ptr; var size = buffer.Length; var res = nng_recv(NngSocket, ref ptr, ref size, flags); return(NngResult <UIntPtr> .OkIfZero(res, size)); } }