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; }
public int Copy(ZmqMsgT dest) { if (!_initialized) { dest.Close(); return 0; } int rc = LibZmq.zmq_msg_copy(dest._ptr, _ptr); dest._initialized = rc == 0; return rc; }
public int Copy(ZmqMsgT dest) { if (!_initialized) { dest.Close(); return(0); } int rc = LibZmq.zmq_msg_copy(dest._ptr, _ptr); dest._initialized = rc == 0; return(rc); }
public int Forward(IntPtr destinationHandle) { using (var message = new ZmqMsgT()) { if (message.Init() == -1) { return -1; } int receiveMore; int bytesSent; do { if (LibZmq.zmq_msg_recv(message, SocketHandle, 0) == -1) { return -1; } if (GetReceiveMore(out receiveMore) == -1) { return -1; } if ((bytesSent = LibZmq.zmq_msg_send(message, destinationHandle, receiveMore == 1 ? (int)SocketFlags.SendMore : 0)) == -1) { return -1; } } while (receiveMore == 1); if (message.Close() == -1) { return -1; } return bytesSent; } }
public int Send(byte[] buffer, int size, int flags) { using (var message = new ZmqMsgT()) { if (message.Init(size) == -1) { return -1; } if (size > 0) { Marshal.Copy(buffer, 0, message.Data(), size); } int bytesSent = RetryIfInterrupted(() => LibZmq.zmq_msg_send(message, SocketHandle, flags)); if (bytesSent == 0 && LibZmq.MajorVersion < 3) { // 0MQ 2.x does not report number of bytes sent, so this may be inaccurate/misleading bytesSent = size; } if (message.Close() == -1) { return -1; } return bytesSent; } }
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; } }