X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-poll.c;h=35c38fe709ae1c4913d5f28f59f6fe42366eaeb0;hb=533101a268dc5015a140ff4695d8eeb04fbe57b6;hp=f97b8d5237c4751367dc34e753eac5cff3c50d57;hpb=dcbf5fac655c77a319577e6ce6072d70445718d9;p=gnulib.git
diff --git a/tests/test-poll.c b/tests/test-poll.c
index f97b8d523..35c38fe70 100644
--- a/tests/test-poll.c
+++ b/tests/test-poll.c
@@ -1,5 +1,5 @@
/* Test of poll() function.
- Copyright (C) 2008 Free Software Foundation, Inc.
+ Copyright (C) 2008-2013 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -12,30 +12,36 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+ along with this program; if not, see . */
/* Written by Paolo Bonzini. */
#include
+/* Specification. */
+#include
+
+#include "signature.h"
+SIGNATURE_CHECK (poll, int, (struct pollfd[], nfds_t, int));
+
#include
#include
#include
#include
#include
-#include
#include
#include
#include
+#include
#include
-#include "sockets.h"
+
+#include "macros.h"
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-# define WIN32_NATIVE
+# define WINDOWS_NATIVE
#endif
-#ifdef WIN32_NATIVE
+#ifdef WINDOWS_NATIVE
#include
#define pipe(x) _pipe(x, 256, O_BINARY)
#endif
@@ -50,7 +56,7 @@
#define SO_REUSEPORT SO_REUSEADDR
#endif
-#define TEST_PORT 12345
+#define TEST_PORT 12345
/* Minimal testing infrastructure. */
@@ -90,6 +96,9 @@ open_server_socket ()
s = socket (AF_INET, SOCK_STREAM, 0);
+ x = 1;
+ setsockopt (s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof (x));
+
memset (&ia, 0, sizeof (ia));
ia.sin_family = AF_INET;
inet_pton (AF_INET, "127.0.0.1", &ia.sin_addr);
@@ -100,9 +109,6 @@ open_server_socket ()
exit (77);
}
- x = 1;
- setsockopt (s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof (x));
-
if (listen (s, 1) < 0)
{
perror ("listen");
@@ -127,13 +133,13 @@ connect_to_socket (int blocking)
if (!blocking)
{
-#ifdef WIN32_NATIVE
+#ifdef WINDOWS_NATIVE
unsigned long iMode = 1;
- ioctlsocket (s, FIONBIO, (void *) &iMode);
-
+ ioctl (s, FIONBIO, (char *) &iMode);
+
#elif defined F_GETFL
int oldflags = fcntl (s, F_GETFL, NULL);
-
+
if (!(oldflags & O_NONBLOCK))
fcntl (s, F_SETFL, oldflags | O_NONBLOCK);
#endif
@@ -161,7 +167,7 @@ poll1 (int fd, int ev, int time)
pfd.fd = fd;
pfd.events = ev;
pfd.revents = 0;
- r = poll (&pfd, 1, time);
+ r = poll (&pfd, 1, time);
if (r < 0)
return r;
@@ -241,7 +247,7 @@ test_connect_first (void)
static void
test_accept_first (void)
{
-#ifndef WIN32_NATIVE
+#ifndef WINDOWS_NATIVE
int s = open_server_socket ();
struct sockaddr_in ia;
socklen_t addrlen;
@@ -256,9 +262,10 @@ test_accept_first (void)
{
addrlen = sizeof (ia);
c = accept (s, (struct sockaddr *) &ia, &addrlen);
+ ASSERT (c >= 0);
close (s);
- write (c, "foo", 3);
- read (c, buf, 3);
+ ASSERT (write (c, "foo", 3) == 3);
+ ASSERT (read (c, buf, 3) == 3);
shutdown (c, SHUT_RD);
close (c);
exit (0);
@@ -267,15 +274,16 @@ test_accept_first (void)
{
close (s);
c = connect_to_socket (true);
+ ASSERT (c >= 0);
if (poll1_nowait (c, POLLOUT | POLLWRNORM | POLLRDBAND)
- != (POLLOUT | POLLWRNORM))
+ != (POLLOUT | POLLWRNORM))
failed ("cannot write after blocking connect");
- write (c, "foo", 3);
+ ASSERT (write (c, "foo", 3) == 3);
wait (&pid);
if (poll1_wait (c, POLLIN) != POLLIN)
failed ("cannot read data left in the socket by closed process");
- read (c, buf, 3);
- write (c, "foo", 3);
+ ASSERT (read (c, buf, 3) == 3);
+ ASSERT (write (c, "foo", 3) == 3);
if ((poll1_wait (c, POLLIN | POLLOUT) & (POLLHUP | POLLERR)) == 0)
failed ("expecting POLLHUP after shutdown");
close (c);
@@ -299,7 +307,7 @@ test_pair (int rd, int wd)
!= POLLWRNORM)
failed ("expecting POLLWRNORM before writing");
- write (wd, "foo", 3);
+ ASSERT (write (wd, "foo", 3) == 3);
if (poll1_wait (rd, POLLIN | POLLRDNORM) != (POLLIN | POLLRDNORM))
failed ("expecting POLLIN | POLLRDNORM after writing");
if (poll1_nowait (rd, POLLIN) != POLLIN)
@@ -307,7 +315,7 @@ test_pair (int rd, int wd)
if (poll1_nowait (rd, POLLRDNORM) != POLLRDNORM)
failed ("expecting POLLRDNORM after writing");
- read (rd, buf, 3);
+ ASSERT (read (rd, buf, 3) == 3);
}
@@ -322,12 +330,15 @@ test_socket_pair (void)
int s = open_server_socket ();
int c1 = connect_to_socket (false);
int c2 = accept (s, (struct sockaddr *) &ia, &addrlen);
+ ASSERT (s >= 0);
+ ASSERT (c1 >= 0);
+ ASSERT (c2 >= 0);
close (s);
test_pair (c1, c2);
close (c1);
- write (c2, "foo", 3);
+ ASSERT (write (c2, "foo", 3) == 3);
if ((poll1_nowait (c2, POLLIN | POLLOUT) & (POLLHUP | POLLERR)) == 0)
failed ("expecting POLLHUP after shutdown");
@@ -342,7 +353,7 @@ test_pipe (void)
{
int fd[2];
- pipe (fd);
+ ASSERT (pipe (fd) >= 0);
test_pair (fd[0], fd[1]);
close (fd[0]);
if ((poll1_wait (fd[1], POLLIN | POLLOUT) & (POLLHUP | POLLERR)) == 0)
@@ -359,8 +370,6 @@ main ()
{
int result;
- gl_sockets_startup (SOCKETS_2_0);
-
#ifdef INTERACTIVE
printf ("Please press Enter\n");
test (test_tty, "TTY");