libdill: Structured Concurrency for C

NAME

chrecv - receive a message from a channel

SYNOPSIS

#include <libdill.h>

int chrecv(int ch, void *val, size_t len, int64_t deadline);

DESCRIPTION

Retrieves a message from a channel. The ch parameter is the channel handle. val points to a buffer to receive the message to. len is the size of the buffer.

The size of the buffer must match the size of the elements stored in the channel as supplied to the chmake function.

If no sender is available, the function waits until one arrives or until the deadline expires.

deadline is a point in time when the operation should time out. Use the now() function to get your current point in time. 0 means immediate timeout, i.e., perform the operation if possible or return without blocking if not. -1 means no deadline, i.e., the call will block forever if the operation cannot be performed.

RETURN VALUE

The function returns 0 on success. On error, it returns -1 and sets errno to one of the values below.

ERRORS

EXAMPLE

int val;
int result = chrecv(ch, &val, sizeof(val), now() + 1000);
if(result != 0) {
    perror("Cannot receive message");
    exit(1);
}
printf("Value %d received.\n", val);