Esempio n. 1
0
        // UV_WRITE is for TCP write. UDP would require a different request type.
        internal WriteRequest()
        // allocate base NativeHandle with size of UV_WRITE + BufferSize
            : base(HandleSize + BufferSize)
        {
            if (BufferSize >= 0)
            {
                // pin request handle
                // Note: WriteRequest is pooled. pinning doesn't happen in HOT PATH!
                // TODO why does this need to be pinned? (maybe because uv_buf_t*?)
                IntPtr HandleAddress = Handle;
                Bufs = (uv_buf_t *)(HandleAddress + HandleSize);
                pin  = GCHandle.Alloc(HandleAddress, GCHandleType.Pinned);

                // pin the data array once and keep it pinned until the end.
                // no need to unpin before returning to pool and pin again in
                // Prepare like we did originally.
                // => data is always same size
                // => pinning only once is faster
                dataPin        = GCHandle.Alloc(data, GCHandleType.Pinned);
                dataPinAddress = dataPin.AddrOfPinnedObject();
            }
            else
            {
                throw new ArgumentException($"BufferSize {BufferSize} needs to be >=0");
            }
        }
Esempio n. 2
0
        internal void Free()
        {
            // release pinned request handle
            if (pin.IsAllocated)
            {
                pin.Free();
            }

            // release pinned data array
            if (dataPin.IsAllocated)
            {
                dataPin.Free();
                dataPinAddress = IntPtr.Zero;
            }

            Bufs = (uv_buf_t *)IntPtr.Zero;
        }
Esempio n. 3
0
 unsafe public static extern int uv_write2(UvRequest req,UvStreamHandle handle,uv_buf_t*bufs,int nbufs,UvStreamHandle sendHandle,uv_write_cb cb);
Esempio n. 4
0
 unsafe public void write(UvRequest req, UvStreamHandle handle, uv_buf_t *bufs, int nbufs, uv_write_cb cb)
 {
     req.Validate();
     handle.Validate();
     Check(_uv_write(req, handle, bufs, nbufs, cb));
 }
Esempio n. 5
0
 unsafe public void write2(UvRequest req, UvStreamHandle handle, uv_buf_t *bufs, int nbufs, UvStreamHandle sendHandle, uv_write_cb cb)
 {
     req.Validate();
     handle.Validate();
     ThrowIfErrored(_uv_write2(req, handle, bufs, nbufs, sendHandle, cb));
 }
Esempio n. 6
0
 unsafe private int UvWrite(UvRequest req, UvStreamHandle handle, uv_buf_t *bufs, int nbufs, uv_write_cb cb)
 {
     return(OnWrite(handle, nbufs, status => cb(req.InternalGetHandle(), status)));
 }
Esempio n. 7
0
 public static extern unsafe int uv_write(UvRequest req,UvStreamHandle handle,uv_buf_t*bufs,int nbufs,uv_write_cb cb);
Esempio n. 8
0
 unsafe public static extern int uv_write(UVWriteRequest req, UVStreamHandle handle, uv_buf_t *bufs, int nbufs, uv_write_cb cb);
Esempio n. 9
0
 public unsafe static void write(UVWriteRequest req, UVStreamHandle handle, uv_buf_t *bufs, int nbufs, uv_write_cb cb)
 {
     req.Validate();
     handle.Validate();
     ThrowIfErrored(uv_write(req, handle, bufs, nbufs, cb));
 }
Esempio n. 10
0
 static extern unsafe int uv_write(IntPtr req, IntPtr handle, uv_buf_t *bufs, int nbufs, uv_watcher_cb cb);
Esempio n. 11
0
 // Write data to stream. Buffers are written in order.
 // Note: The memory pointed to by the buffers must remain valid until the callback gets called.
 internal static unsafe void WriteStream(IntPtr requestHandle, IntPtr streamHandle, uv_buf_t *bufs, int size, uv_watcher_cb write_callback)
 {
     if (requestHandle != IntPtr.Zero && streamHandle != IntPtr.Zero)
     {
         int result = uv_write(requestHandle, streamHandle, bufs, size, write_callback);
         ThrowIfError(result);
     }
     else
     {
         throw new ArgumentException("requestHandle and streamHandle can't be null!");
     }
 }
Esempio n. 12
0
 private static unsafe extern int uv_write2(IntPtr req, IntPtr handle, uv_buf_t *bufs, int nbufs, IntPtr sendHandle, uv_watcher_cb cb);
Esempio n. 13
0
        internal static unsafe void WriteStream(IntPtr requestHandle, IntPtr streamHandle, uv_buf_t *bufs, ref int size, IntPtr sendHandle)
        {
            Debug.Assert(requestHandle != IntPtr.Zero);
            Debug.Assert(streamHandle != IntPtr.Zero);
            Debug.Assert(sendHandle != IntPtr.Zero);

            int result = uv_write2(requestHandle, streamHandle, bufs, size, sendHandle, WriteRequest.WriteCallback);

            ThrowIfError(result);
        }
Esempio n. 14
0
 unsafe private int UvWrite(UvRequest req, UvStreamHandle handle, uv_buf_t *bufs, int nbufs, uv_write_cb cb)
 {
     return(_onWrite(handle, new ArraySegment <ArraySegment <byte> >(), status => cb(req.InternalGetHandle(), status)));
 }