Mercurial > gnulib
changeset 39230:9626419f9db3
getsockname tests: More tests.
* tests/test-getsockname.c (open_server_socket): New function, mostly
copied from test-poll.c.
(main): Check that getsockname fills in addr.
* modules/getsockname-tests (Depends-on): Add the necessary
dependencies.
(test_getsockname_LDADD): Link with $(INET_PTON_LIB).
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sat, 27 Jan 2018 08:52:31 +0100 |
parents | cf2037479174 |
children | 05af34a75041 |
files | ChangeLog modules/getsockname-tests tests/test-getsockname.c |
diffstat | 3 files changed, 66 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Fri Jan 26 18:08:36 2018 -0800 +++ b/ChangeLog Sat Jan 27 08:52:31 2018 +0100 @@ -1,3 +1,13 @@ +2018-01-27 Bruno Haible <bruno@clisp.org> + + getsockname tests: More tests. + * tests/test-getsockname.c (open_server_socket): New function, mostly + copied from test-poll.c. + (main): Check that getsockname fills in addr. + * modules/getsockname-tests (Depends-on): Add the necessary + dependencies. + (test_getsockname_LDADD): Link with $(INET_PTON_LIB). + 2018-01-26 Paul Eggert <eggert@cs.ucla.edu> manywarnings: fix maintainer comment
--- a/modules/getsockname-tests Fri Jan 26 18:08:36 2018 -0800 +++ b/modules/getsockname-tests Sat Jan 27 08:52:31 2018 +0100 @@ -5,11 +5,19 @@ Depends-on: netinet_in +arpa_inet +inet_pton +errno +perror sockets +socket +setsockopt +bind +listen configure.ac: Makefile.am: TESTS += test-getsockname check_PROGRAMS += test-getsockname -test_getsockname_LDADD = $(LDADD) @LIBSOCKET@ +test_getsockname_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB)
--- a/tests/test-getsockname.c Fri Jan 26 18:08:36 2018 -0800 +++ b/tests/test-getsockname.c Sat Jan 27 08:52:31 2018 +0100 @@ -21,13 +21,47 @@ #include "signature.h" SIGNATURE_CHECK (getsockname, int, (int, struct sockaddr *, socklen_t *)); -#include <errno.h> +#include <stdio.h> +#include <string.h> #include <netinet/in.h> +#include <arpa/inet.h> #include <unistd.h> +#include <errno.h> #include "sockets.h" #include "macros.h" +static int +open_server_socket (void) +{ + int s, x; + struct sockaddr_in ia; + + 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, "0.0.0.0", &ia.sin_addr); + /* Port 0 means that the system should assign a port. */ + ia.sin_port = htons (0); + if (bind (s, (struct sockaddr *) &ia, sizeof (ia)) < 0) + { + perror ("bind"); + exit (77); + } + + if (listen (s, 1) < 0) + { + perror ("listen"); + exit (77); + } + + return s; +} + int main (void) { @@ -52,5 +86,17 @@ ASSERT (errno == EBADF); } + /* Test behaviour for a server socket. */ + { + int s = open_server_socket (); + struct sockaddr_in addr; + socklen_t addrlen = sizeof (addr); + + memset (&addr, 0, sizeof (addr)); + ASSERT (getsockname (s, (struct sockaddr *) &addr, &addrlen) == 0); + ASSERT (addr.sin_family == AF_INET); + ASSERT (ntohs (addr.sin_port) != 0); + } + return 0; }