diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-11-16 09:51:44 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-11-16 09:52:50 +0100 |
commit | dd96574e4576a7a2d23781829585bdea1e72bd15 (patch) | |
tree | 291cd4424d46ed92f055872f6b1a514c68ccc2a0 /testsuite/syscalls01 | |
parent | Update rtems_waf module for msys2 support (diff) | |
download | rtems-libbsd-dd96574e4576a7a2d23781829585bdea1e72bd15.tar.bz2 |
SOCKETPAIR(2): Port to RTEMS
Diffstat (limited to 'testsuite/syscalls01')
-rw-r--r-- | testsuite/syscalls01/test_main.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/testsuite/syscalls01/test_main.c b/testsuite/syscalls01/test_main.c index e11c8334..19763236 100644 --- a/testsuite/syscalls01/test_main.c +++ b/testsuite/syscalls01/test_main.c @@ -1359,6 +1359,53 @@ test_socket_poll(void) assert(rtems_resource_snapshot_check(&snapshot)); } +static void +no_mem_socket_pair(int fd) +{ + int sd[2]; + int rv; + + errno = 0; + rv = socketpair(PF_UNIX, SOCK_DGRAM, 0, &sd[0]); + assert(rv == -1); + assert(errno == ENOMEM); +} + +static void +test_socket_pair(void) +{ + rtems_resource_snapshot snapshot; + int sd[2]; + int rv; + char in[] = { 'x' }; + char out[] = { 'o' }; + ssize_t n; + + puts("test socket pair"); + + rtems_resource_snapshot_take(&snapshot); + + rv = socketpair(PF_UNIX, SOCK_DGRAM, 0, &sd[0]); + assert(rv == 0); + + n = write(sd[0], &out[0], sizeof(out)); + assert(n == (ssize_t)sizeof(out)); + + n = read(sd[1], &in[0], sizeof(in)); + assert(n == (ssize_t)sizeof(in)); + + assert(memcmp(&in[0], &out[0], sizeof(in)) == 0); + + rv = close(sd[0]); + assert(rv == 0); + + rv = close(sd[1]); + assert(rv == 0); + + do_no_mem_test(no_mem_socket_pair, -1); + + assert(rtems_resource_snapshot_check(&snapshot)); +} static void test_kqueue_unsupported_ops(void) @@ -1754,6 +1801,7 @@ test_main(void) test_socket_recv_and_recvfrom_and_recvmsg(); test_socket_select(); test_socket_poll(); + test_socket_pair(); test_kqueue_unsupported_ops(); test_kqueue_fstat(); |