-/*
- * Accept connection on the socket and exchange the fd for the shared
- * memory segment.
- */
-static clib_error_t *
-stats_socket_accept_ready (clib_file_t * uf)
-{
- stats_main_t *sm = &stats_main;
- clib_error_t *err;
- clib_socket_t client = { 0 };
-
- err = clib_socket_accept (sm->socket, &client);
- if (err)
- {
- clib_error_report (err);
- return err;
- }
-
- /* Send the fd across and close */
- err = clib_socket_sendmsg (&client, 0, 0, &sm->memfd, 1);
- if (err)
- clib_error_report (err);
- clib_socket_close (&client);
-
- return 0;
-}
-
-static void
-stats_segment_socket_init (void)
-{
- stats_main_t *sm = &stats_main;
- clib_error_t *error;
- clib_socket_t *s = clib_mem_alloc (sizeof (clib_socket_t));
-
- s->config = (char *) sm->socket_name;
- s->flags = CLIB_SOCKET_F_IS_SERVER | CLIB_SOCKET_F_SEQPACKET |
- CLIB_SOCKET_F_ALLOW_GROUP_WRITE | CLIB_SOCKET_F_PASSCRED;
- if ((error = clib_socket_init (s)))
- {
- clib_error_report (error);
- return;
- }
-
- clib_file_t template = { 0 };
- clib_file_main_t *fm = &file_main;
- template.read_function = stats_socket_accept_ready;
- template.file_descriptor = s->fd;
- template.description =
- format (0, "stats segment listener %s", STAT_SEGMENT_SOCKET_FILE);
- clib_file_add (fm, &template);
-
- sm->socket = s;
-}
-