+#if SOCK_SERVER_USE_EPOLL && !defined (VCL_TEST)
+static inline void
+af_unix_echo (void)
+{
+ sock_server_main_t *ssm = &sock_server_main;
+ int af_unix_client_fd;
+ int rv;
+ int errno_val;
+ uint8_t buffer[256];
+ size_t nbytes = strlen (SOCK_TEST_MIXED_EPOLL_DATA) + 1;
+
+#if HAVE_ACCEPT4
+ af_unix_client_fd = accept4 (ssm->af_unix_listen_fd,
+ (struct sockaddr *) NULL, NULL, NULL);
+#else
+ af_unix_client_fd = accept (ssm->af_unix_listen_fd,
+ (struct sockaddr *) NULL, NULL);
+#endif
+ if (af_unix_client_fd < 0)
+ {
+ errno_val = errno;
+ perror ("ERROR in af_unix_accept()");
+ fprintf (stderr, "SERVER: ERROR: accept failed "
+ "(errno = %d)!\n", errno_val);
+ return;
+ }
+
+ printf ("SERVER: Got an AF_UNIX connection -- fd = %d (0x%08x)!\n",
+ af_unix_client_fd, af_unix_client_fd);
+
+ memset (buffer, 0, sizeof (buffer));
+
+ rv = read (af_unix_client_fd, buffer, nbytes);
+ if (rv < 0)
+ {
+ errno_val = errno;
+ perror ("ERROR in af_unix_echo(): read() failed");
+ fprintf (stderr, "SERVER: ERROR: read(af_unix_client_fd %d (0x%x), "
+ "\"%s\", nbytes %lu) failed (errno = %d)!\n",
+ af_unix_client_fd, af_unix_client_fd, buffer, nbytes,
+ errno_val);
+ goto done;
+ }
+
+ printf ("SERVER (AF_UNIX): RX (%d bytes) - '%s'\n", rv, buffer);
+
+ if (!strncmp (SOCK_TEST_MIXED_EPOLL_DATA, (const char *) buffer, nbytes))
+ {
+ rv = write (af_unix_client_fd, buffer, nbytes);
+ if (rv < 0)
+ {
+ errno_val = errno;
+ perror ("ERROR in af_unix_echo(): write() failed");
+ fprintf (stderr,
+ "SERVER: ERROR: write(af_unix_client_fd %d (0x%x), "
+ "\"%s\", nbytes %ld) failed (errno = %d)!\n",
+ af_unix_client_fd, af_unix_client_fd, buffer, nbytes,
+ errno_val);
+ goto done;
+ }
+ printf ("SERVER (AF_UNIX): TX (%d bytes) - '%s'\n", rv, buffer);
+ ssm->af_unix_xacts++;
+ }
+done:
+ close (af_unix_client_fd);
+}
+
+#endif
+