/// <summary> /// Queue a message buffer to be sent by the socket in blocking mode. /// </summary> /// <param name="buffer">A <see cref="byte"/> array that contains the message to be sent.</param> /// <param name="size">The size of the message to send.</param> /// <param name="flags">A combination of <see cref="SocketFlags"/> values to use when sending.</param> /// <returns>The number of bytes sent by the socket.</returns> /// <exception cref="ArgumentNullException"><paramref name="buffer"/> is null.</exception> /// <exception cref="ArgumentOutOfRangeException"><paramref name="size"/> is a negative value or is larger than the length of <paramref name="buffer"/>.</exception> /// <exception cref="ZmqSocketException">An error occurred sending data to a remote endpoint.</exception> /// <exception cref="ObjectDisposedException">The <see cref="ZmqSocket"/> has been closed.</exception> /// <exception cref="NotSupportedException">The current socket type does not support Send operations.</exception> public virtual int Send(byte[] buffer, int size, SocketFlags flags) { EnsureNotDisposed(); if (buffer == null) { throw new ArgumentNullException("buffer"); } if (size < 0 || size > buffer.Length) { throw new ArgumentOutOfRangeException("size", "Expected a non-negative value less than or equal to the buffer length."); } int sentBytes = _socketProxy.Send(buffer, size, (int)flags); if (sentBytes >= 0) { SendStatus = (sentBytes == size || LibZmq.MajorVersion < LatestVersion) ? SendStatus.Sent : SendStatus.Incomplete; return(sentBytes); } if (ErrorProxy.ShouldTryAgain) { SendStatus = SendStatus.TryAgain; return(-1); } if (ErrorProxy.ContextWasTerminated) { SendStatus = SendStatus.Interrupted; return(-1); } throw new ZmqSocketException(ErrorProxy.GetLastError()); }