diff options
author | Kevin Cernekee <cernekee@gmail.com> | 2012-04-07 13:31:30 -0700 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2012-04-08 17:00:57 -0400 |
commit | f6944967ac9ec5d1014a8e004e5d567f595668f4 (patch) | |
tree | b7819304acf46455d3628e7a8a53e12d9d16aff9 /test/inet | |
parent | 68107fe05073e9fc2bbe63d26ab43356f851ecf3 (diff) |
test/inet: Add tst-sock-nonblock
Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'test/inet')
-rw-r--r-- | test/inet/tst-sock-nonblock.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/test/inet/tst-sock-nonblock.c b/test/inet/tst-sock-nonblock.c new file mode 100644 index 000000000..54a7ee28a --- /dev/null +++ b/test/inet/tst-sock-nonblock.c @@ -0,0 +1,53 @@ +/* vi: set sw=4 ts=4 sts=4: */ +/* + * Nonblocking socket test for uClibc + * Copyright (C) 2012 by Kevin Cernekee <cernekee@gmail.com> + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <errno.h> +#include <error.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/un.h> +#include <sys/fcntl.h> + +static int +do_test(void) +{ + int fd, ret, result = 0; + struct sockaddr_un sa; + char buf; + + fd = socket(AF_UNIX, SOCK_DGRAM | SOCK_NONBLOCK, 0); + if (fd < 0) { + perror("socket()"); + result = 1; + } + + memset(&sa, 0, sizeof(sa)); + sa.sun_family = AF_UNIX; + strcpy(sa.sun_path, "socktest"); + unlink("socktest"); + if (bind(fd, (const struct sockaddr *)&sa, sizeof(sa)) < 0) { + perror("bind()"); + result = 1; + } + + ret = read(fd, &buf, sizeof(buf)); + if (ret != -1 || errno != EAGAIN) { + error(0, 0, "Nonblocking read returned %d", ret); + result = 1; + } + + return result; +} + +#define TIMEOUT 5 +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |