diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-09-23 14:27:32 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-09-23 14:29:00 +0200 |
commit | cff1625f2787e08f33e67f949c0722c0aa05f618 (patch) | |
tree | 0874b63641d70eccd26af7a11c04b839c0157641 /testsuite/syscalls01/test_main.c | |
parent | test/syscalls01: Fix sporadic test failures (diff) | |
download | rtems-libbsd-cff1625f2787e08f33e67f949c0722c0aa05f618.tar.bz2 |
Add pselect()
Diffstat (limited to 'testsuite/syscalls01/test_main.c')
-rw-r--r-- | testsuite/syscalls01/test_main.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/testsuite/syscalls01/test_main.c b/testsuite/syscalls01/test_main.c index b95a6c24..3254ba5c 100644 --- a/testsuite/syscalls01/test_main.c +++ b/testsuite/syscalls01/test_main.c @@ -1329,6 +1329,81 @@ test_socket_select(void) } static void +no_mem_socket_pselect(int fd) +{ + struct fd_set set; + int nfds; + int rv; + + FD_ZERO(&set); + FD_SET(fd, &set); + nfds = fd + 1; + + errno = 0; + rv = pselect(nfds, &set, NULL, NULL, NULL, NULL); + assert(rv == -1); + assert(errno == ENOMEM); +} + +static void +test_socket_pselect(void) +{ + rtems_resource_snapshot snapshot; + struct fd_set set; + int nfds; + int sd; + int rv; + + puts("test socket pselect"); + + sd = socket(PF_INET, SOCK_DGRAM, 0); + assert(sd >= 0); + + rv = close(sd); + assert(rv == 0); + + FD_ZERO(&set); + FD_SET(sd, &set); + nfds = sd + 1; + + errno = 0; + rv = pselect(nfds, &set, NULL, NULL, NULL, NULL); + assert(rv == -1); + assert(errno == EBADF); + + epoch_cleanup(); + rtems_resource_snapshot_take(&snapshot); + + sd = socket(PF_INET, SOCK_DGRAM, 0); + assert(sd >= 0); + + do_no_mem_test(no_mem_socket_pselect, sd); + + FD_ZERO(&set); + nfds = -1; + + errno = 0; + rv = pselect(nfds, &set, NULL, NULL, NULL, NULL); + assert(rv == -1); + assert(errno == EINVAL); + + rv = close(sd); + assert(rv == 0); + + FD_ZERO(&set); + FD_SET(sd, &set); + nfds = sd + 1; + + errno = 0; + rv = pselect(nfds, &set, NULL, NULL, NULL, NULL); + assert(rv == -1); + assert(errno == EBADF); + + epoch_cleanup(); + assert(rtems_resource_snapshot_check(&snapshot)); +} + +static void no_mem_socket_poll(int fd) { struct pollfd pfd; @@ -1662,6 +1737,7 @@ test_main(void) test_socket_send_and_sendto_and_sendmsg(); test_socket_recv_and_recvfrom_and_recvmsg(); test_socket_select(); + test_socket_pselect(); test_socket_poll(); test_socket_pair(); |