UDT Reference: Functions

recvmsg

The recvmsg method receives a valid message.

int recvmsg(
  UDTSOCKET u,
  char* msg,
  int len
);
Parameters
u
[in] Descriptor identifying a connected socket.
msg
[out] The buffer used to store incoming message.
len
[in] Length of the buffer.
Return Value

On success, recvmsg returns the actual size of received message. Otherwise UDT::ERROR is returned and specific error information can be retrieved by getlasterror. If UDT_RCVTIMEO is set to a positive value, zero will be returned if no message is received before the timer expires.

Error Name Error Code Comment
ECONNLOST 2001 connection has been broken and no data left in receiver buffer.
ENOCONN 2002 u is not connected.
EINVSOCK 5004 u is not an valid socket.
ESTREAMILL 5009 cannot use recvmsg in SOCK_STREAM mode.
EASYNCRCV 6002 u is non-blocking (UDT_RCVSYN = false) but no message is available.
ETIMEOUT 6003 Timeout on UDT_RCVTIMEO .
Description

The recvmsg method reads a message from the protocol buffer. The UDT socket must be in SOCK_DGRAM mode in order to send or receive messages. Message is the minimum data unit in this situation. Each recvmsg will read no more than one message, even if the message is smaller than the size of buf and there are more messages available. On the other hand, if the buf is not enough to hold the first message, only part of the message will be copied into the buffer, but the message will still be discarded after this recvmsg call.

In blocking mode (default), recvmsg waits until there is a valid message received into the receiver buffer. In non-blocking mode, recvmsg returns immediately and returns error if no message available.

If UDT_RCVTIMEO is set and the socket is in blocking mode, recvmsg only waits a limited time specified by UDT_RCVTIMEO option. If there is still no message available when the timer expires, error will be returned. UDT_RCVTIMEO has no effect for non-blocking socket.

See Also

send, recv, sendmsg