libdill: Structured Concurrency for C


chrecv - receive a message from a channel


#include <libdill.h>

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


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.


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



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