public int Receive(byte[] buffer, int flags) { int bytesReceived; // Use zmq_buffer_recv method if appropriate -> results in fewer P/Invoke calls if (buffer.Length <= MaxBufferSize && LibZmq.zmq_buffer_recv != null) { bytesReceived = Retry.IfInterrupted(LibZmq.zmq_buffer_recv.Invoke, SocketHandle, _buffer, MaxBufferSize, flags); int size = Math.Min(buffer.Length, bytesReceived); if (size > 0) { Marshal.Copy(_buffer, buffer, 0, size); } return size; } if (_msg.Init(buffer.Length) == -1) { return -1; } bytesReceived = Retry.IfInterrupted(LibZmq.zmq_msg_recv.Invoke, _msg.Ptr, SocketHandle, flags); if (bytesReceived == 0 && LibZmq.MajorVersion < 3) { // 0MQ 2.x does not return number of bytes received bytesReceived = _msg.Size(); } if (bytesReceived > 0) { Marshal.Copy(_msg.Data(), buffer, 0, bytesReceived); } if (_msg.Close() == -1) { return -1; } return bytesReceived; }
/// <summary> /// Receive a message in the space provided by msg. /// </summary> /// <param name="msg">Message is received in this parameter. The caller is responsible for /// closing the message by calling msg.Close()</param> /// <param name="flags">Flags to pass to implementation</param> /// <returns>Number of bytes received or a negative value in case of an error</returns> public int Receive(ZmqMsgT msg, int flags) { if (msg.Init() == -1) { return(-1); } int bytesReceived = Retry.IfInterrupted(LibZmq.zmq_msg_recv.Invoke, msg.Ptr, SocketHandle, flags); if (bytesReceived == 0 && LibZmq.MajorVersion < 3) { // 0MQ 2.x does not return number of bytes received bytesReceived = msg.Size(); } return(bytesReceived); }
public byte[] Receive(byte[] buffer, int flags, out int size) { size = -1; using (var message = new ZmqMsgT()) { if (message.Init() == -1) { return buffer; } int bytesReceived = RetryIfInterrupted(() => LibZmq.zmq_msg_recv(message, SocketHandle, flags)); if (bytesReceived >= 0) { if (bytesReceived == 0 && LibZmq.MajorVersion < 3) { // 0MQ 2.x does not return number of bytes received bytesReceived = message.Size(); } size = bytesReceived; if (buffer == null || size > buffer.Length) { buffer = new byte[size]; } Marshal.Copy(message.Data(), buffer, 0, size); } if (message.Close() == -1) { size = -1; } return buffer; } }
public int Receive(byte[] buffer, int flags) { using (var message = new ZmqMsgT()) { if (message.Init(buffer.Length) == -1) { return -1; } int bytesReceived = RetryIfInterrupted(() => LibZmq.zmq_msg_recv(message, SocketHandle, flags)); if (bytesReceived == 0 && LibZmq.MajorVersion < 3) { // 0MQ 2.x does not return number of bytes received bytesReceived = message.Size(); } if (bytesReceived > 0) { Marshal.Copy(message.Data(), buffer, 0, bytesReceived); } if (message.Close() == -1) { return -1; } return bytesReceived; } }
/// <summary> /// Receive a message in the space provided by msg. /// </summary> /// <param name="msg">Message is received in this parameter. The caller is responsible for /// closing the message by calling msg.Close()</param> /// <param name="flags">Flags to pass to implementation</param> /// <returns>Number of bytes received or a negative value in case of an error</returns> public int Receive(ZmqMsgT msg, int flags) { if (msg.Init() == -1) return -1; int bytesReceived = Retry.IfInterrupted(LibZmq.zmq_msg_recv.Invoke, msg.Ptr, SocketHandle, flags); if (bytesReceived == 0 && LibZmq.MajorVersion < 3) { // 0MQ 2.x does not return number of bytes received bytesReceived = msg.Size(); } return bytesReceived; }