Mercurial > gnulib
view tests/test-nonblocking-socket-main.c @ 40163:b89f4c441767
Avoid build errors due to wrong references between modules.
* lib/uninorm/canonical-decomposition.c: Include
"uninorm/decomposition-table.h", not "decomposition-table.h".
* lib/uninorm/decomposition.c: Likewise.
* lib/uninorm/u8-normalize.c: Include "uninorm/decompose-internal.h",
not "decompose-internal.h".
* lib/uninorm/u16-normalize.c: Likewise.
* lib/uninorm/u32-normalize.c: Likewise.
* lib/uninorm/uninorm-filter.c: Likewise.
* lib/uninorm/nfkc.c: Likewise.
* lib/uninorm/nfkd.c: Likewise.
* lib/unicase/u8-casemap.c: Include "unicase/caseprop.h", not
"caseprop.h".
* lib/unicase/u8-ct-totitle.c: Likewise.
* lib/unicase/u8-prefix-context.c: Likewise.
* lib/unicase/u8-suffix-context.c: Likewise.
* lib/unicase/u16-casemap.c: Likewise.
* lib/unicase/u16-ct-totitle.c: Likewise.
* lib/unicase/u16-prefix-context.c: Likewise.
* lib/unicase/u16-suffix-context.c: Likewise.
* lib/unicase/u32-casemap.c: Likewise.
* lib/unicase/u32-ct-totitle.c: Likewise.
* lib/unicase/u32-prefix-context.c: Likewise.
* lib/unicase/u32-suffix-context.c: Likewise.
* lib/unicase/u8-tolower.c: Include "unicase/unicasemap.h", not
"unicasemap.h".
* lib/unicase/u8-toupper.c: Likewise.
* lib/unicase/u8-ct-tolower.c: Likewise.
* lib/unicase/u8-ct-toupper.c: Likewise.
* lib/unicase/u16-tolower.c: Likewise.
* lib/unicase/u16-toupper.c: Likewise.
* lib/unicase/u16-ct-tolower.c: Likewise.
* lib/unicase/u16-ct-toupper.c: Likewise.
* lib/unicase/u32-tolower.c: Likewise.
* lib/unicase/u32-toupper.c: Likewise.
* lib/unicase/u32-ct-tolower.c: Likewise.
* lib/unicase/u32-ct-toupper.c: Likewise.
* lib/unicase/u8-ct-casefold.c: Include "unicase/unicasemap.h", not
"unicasemap.h", and "unicase/casefold.h", not "casefold.h".
* lib/unicase/u16-ct-casefold.c: Likewise.
* lib/unicase/u32-ct-casefold.c: Likewise.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Mon, 28 Jan 2019 01:20:11 +0100 |
parents | b06060465f09 |
children |
line wrap: on
line source
/* Test for nonblocking read and write on sockets. Copyright (C) 2011-2019 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 the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 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, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/time.h> #include <sys/socket.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <process.h> #else # include <spawn.h> #endif #include "nonblocking.h" #include "wait-process.h" #include "macros.h" #include "socket-server.h" #include "test-nonblocking-socket.h" #define PROG_ROLE "main" #include "test-nonblocking-writer.h" int main (int argc, char *argv[]) { const char *child_path; int test; int server; int port; int child; int server_socket; int exitcode; child_path = argv[1]; test = atoi (argv[2]); /* Create a server socket. */ server = create_server (0, 1, &port); /* Spawn the child process. */ { char port_arg[10+1]; const char *child_argv[4]; sprintf (port_arg, "%u", port); child_argv[0] = child_path; child_argv[1] = argv[2]; child_argv[2] = port_arg; child_argv[3] = NULL; #if defined _WIN32 && ! defined __CYGWIN__ child = spawnvpe (P_NOWAIT, child_path, child_argv, (const char **) environ); ASSERT (child >= 0); #else { pid_t child_pid; int err = posix_spawnp (&child_pid, child_path, NULL, NULL, (char **) child_argv, environ); ASSERT (err == 0); child = child_pid; } #endif } /* Accept a connection from the child process. */ server_socket = create_server_socket (server); /* Prepare the file descriptor. */ if (test & 1) ASSERT (set_nonblocking_flag (server_socket, true) >= 0); #if ENABLE_DEBUGGING # ifdef SO_SNDBUF { int value; socklen_t value_len = sizeof (value); if (getsockopt (server_socket, SOL_SOCKET, SO_SNDBUF, &value, &value_len) >= 0) fprintf (stderr, "SO_SNDBUF = %d\n", value); } # endif # ifdef SO_RCVBUF { int value; socklen_t value_len = sizeof (value); if (getsockopt (server_socket, SOL_SOCKET, SO_RCVBUF, &value, &value_len) >= 0) fprintf (stderr, "SO_RCVBUF = %d\n", value); } # endif #endif exitcode = main_writer_loop (test, SOCKET_DATA_BLOCK_SIZE, server_socket, SOCKET_HAS_LARGE_BUFFER); { int err = wait_subprocess (child, child_path, false, false, false, false, NULL); ASSERT (err == 0); } return exitcode; }