xref: /linux/tools/testing/selftests/bpf/io_helpers.c (revision fcc79e1714e8c2b8e216dc3149812edd37884eef)
1 // SPDX-License-Identifier: GPL-2.0
2 #include <sys/select.h>
3 #include <unistd.h>
4 #include <errno.h>
5 
6 int read_with_timeout(int fd, char *buf, size_t count, long usec)
7 {
8 	const long M = 1000 * 1000;
9 	struct timeval tv = { usec / M, usec % M };
10 	fd_set fds;
11 	int err;
12 
13 	FD_ZERO(&fds);
14 	FD_SET(fd, &fds);
15 	err = select(fd + 1, &fds, NULL, NULL, &tv);
16 	if (err < 0)
17 		return err;
18 	if (FD_ISSET(fd, &fds))
19 		return read(fd, buf, count);
20 	return -EAGAIN;
21 }
22