projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
poll, select: handle ERROR_BROKEN_PIPE.
[gnulib.git]
/
tests
/
test-poll.c
diff --git
a/tests/test-poll.c
b/tests/test-poll.c
index
cacb3a2
..
7488090
100644
(file)
--- a/
tests/test-poll.c
+++ b/
tests/test-poll.c
@@
-1,5
+1,5
@@
/* Test of poll() function.
/* Test of poll() function.
- Copyright (C) 2008 Free Software Foundation, Inc.
+ Copyright (C) 2008
-2010
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
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
@@
-19,18
+19,29
@@
#include <config.h>
#include <config.h>
+#include <poll.h>
+
+#include "signature.h"
+SIGNATURE_CHECK (poll, int, (struct pollfd[], nfds_t, int));
+
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
-#include <poll.h>
#include <fcntl.h>
#include <stdlib.h>
#include <fcntl.h>
#include <stdlib.h>
+#include <stdbool.h>
+#include <sys/ioctl.h>
#include <errno.h>
#include <errno.h>
-#ifdef HAVE_IO_H
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# define WIN32_NATIVE
+#endif
+
+#ifdef WIN32_NATIVE
#include <io.h>
#include <io.h>
+#define pipe(x) _pipe(x, 256, O_BINARY)
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
@@
-39,13
+50,11
@@
#include <sys/wait.h>
#endif
#include <sys/wait.h>
#endif
-enum { FALSE, TRUE };
-
#ifndef SO_REUSEPORT
#define SO_REUSEPORT SO_REUSEADDR
#endif
#ifndef SO_REUSEPORT
#define SO_REUSEPORT SO_REUSEADDR
#endif
-#define TEST_PORT 12345
+#define TEST_PORT
12345
/* Minimal testing infrastructure. */
/* Minimal testing infrastructure. */
@@
-87,7
+96,7
@@
open_server_socket ()
memset (&ia, 0, sizeof (ia));
ia.sin_family = AF_INET;
memset (&ia, 0, sizeof (ia));
ia.sin_family = AF_INET;
- inet_
aton (
"127.0.0.1", &ia.sin_addr);
+ inet_
pton (AF_INET,
"127.0.0.1", &ia.sin_addr);
ia.sin_port = htons (TEST_PORT);
if (bind (s, (struct sockaddr *) &ia, sizeof (ia)) < 0)
{
ia.sin_port = htons (TEST_PORT);
if (bind (s, (struct sockaddr *) &ia, sizeof (ia)) < 0)
{
@@
-117,33
+126,29
@@
connect_to_socket (int blocking)
memset (&ia, 0, sizeof (ia));
ia.sin_family = AF_INET;
memset (&ia, 0, sizeof (ia));
ia.sin_family = AF_INET;
- inet_
aton (
"127.0.0.1", &ia.sin_addr);
+ inet_
pton (AF_INET,
"127.0.0.1", &ia.sin_addr);
ia.sin_port = htons (TEST_PORT);
if (!blocking)
{
ia.sin_port = htons (TEST_PORT);
if (!blocking)
{
-#ifdef
__MSVCRT__
+#ifdef
WIN32_NATIVE
unsigned long iMode = 1;
unsigned long iMode = 1;
- ioctl (s, FIONBIO, &iMode);
-
+ ioctl (s, FIONBIO,
(char *)
&iMode);
+
#elif defined F_GETFL
int oldflags = fcntl (s, F_GETFL, NULL);
#elif defined F_GETFL
int oldflags = fcntl (s, F_GETFL, NULL);
-
+
if (!(oldflags & O_NONBLOCK))
fcntl (s, F_SETFL, oldflags | O_NONBLOCK);
#endif
}
if (!(oldflags & O_NONBLOCK))
fcntl (s, F_SETFL, oldflags | O_NONBLOCK);
#endif
}
- if (connect (s, (struct sockaddr *) &ia, sizeof (ia)) < 0)
+ if (connect (s, (struct sockaddr *) &ia, sizeof (ia)) < 0
+ && (blocking || errno != EINPROGRESS))
{
{
- if (errno != EINPROGRESS)
- {
- perror ("connect");
- exit (77);
- }
+ perror ("connect");
+ exit (77);
}
}
- else if (!blocking)
- failed ("huh, connect succeeded?");
return s;
}
return s;
}
@@
-160,7
+165,7
@@
poll1 (int fd, int ev, int time)
pfd.fd = fd;
pfd.events = ev;
pfd.revents = 0;
pfd.fd = fd;
pfd.events = ev;
pfd.revents = 0;
- r = poll (&pfd, 1, time);
+ r = poll (&pfd, 1, time);
if (r < 0)
return r;
if (r < 0)
return r;
@@
-218,7
+223,7
@@
test_connect_first (void)
if (poll1_nowait (s, POLLIN | POLLRDNORM | POLLRDBAND) != 0)
failed ("can read, socket not connected");
if (poll1_nowait (s, POLLIN | POLLRDNORM | POLLRDBAND) != 0)
failed ("can read, socket not connected");
- c1 = connect_to_socket (
FALSE
);
+ c1 = connect_to_socket (
false
);
if (poll1_wait (s, POLLIN | POLLRDNORM | POLLRDBAND) != (POLLIN | POLLRDNORM))
failed ("expecting POLLIN | POLLRDNORM on passive socket");
if (poll1_wait (s, POLLIN | POLLRDNORM | POLLRDBAND) != (POLLIN | POLLRDNORM))
failed ("expecting POLLIN | POLLRDNORM on passive socket");
@@
-240,7
+245,7
@@
test_connect_first (void)
static void
test_accept_first (void)
{
static void
test_accept_first (void)
{
-#ifndef
__MSVCRT__
+#ifndef
WIN32_NATIVE
int s = open_server_socket ();
struct sockaddr_in ia;
socklen_t addrlen;
int s = open_server_socket ();
struct sockaddr_in ia;
socklen_t addrlen;
@@
-265,9
+270,9
@@
test_accept_first (void)
else
{
close (s);
else
{
close (s);
- c = connect_to_socket (
TRUE
);
+ c = connect_to_socket (
true
);
if (poll1_nowait (c, POLLOUT | POLLWRNORM | POLLRDBAND)
if (poll1_nowait (c, POLLOUT | POLLWRNORM | POLLRDBAND)
- != (POLLOUT | POLLWRNORM))
+
!= (POLLOUT | POLLWRNORM))
failed ("cannot write after blocking connect");
write (c, "foo", 3);
wait (&pid);
failed ("cannot write after blocking connect");
write (c, "foo", 3);
wait (&pid);
@@
-319,7
+324,7
@@
test_socket_pair (void)
socklen_t addrlen = sizeof (ia);
int s = open_server_socket ();
socklen_t addrlen = sizeof (ia);
int s = open_server_socket ();
- int c1 = connect_to_socket (
FALSE
);
+ int c1 = connect_to_socket (
false
);
int c2 = accept (s, (struct sockaddr *) &ia, &addrlen);
close (s);
int c2 = accept (s, (struct sockaddr *) &ia, &addrlen);
close (s);