12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /*
- * libwebsockets - small server side websockets and web server implementation
- *
- * Copyright (C) 2010-2018 Andy Green <[email protected]>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation:
- * version 2.1 of the License.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
- #define _GNU_SOURCE
- #include "core/private.h"
- #include <pwd.h>
- #include <grp.h>
- #ifdef LWS_WITH_PLUGINS
- #include <dlfcn.h>
- #endif
- #include <dirent.h>
- int
- lws_plat_init(struct lws_context *context,
- const struct lws_context_creation_info *info)
- {
- int fd;
- /* master context has the global fd lookup array */
- context->lws_lookup = lws_zalloc(sizeof(struct lws *) *
- context->max_fds, "lws_lookup");
- if (context->lws_lookup == NULL) {
- lwsl_err("OOM on lws_lookup array for %d connections\n",
- context->max_fds);
- return 1;
- }
- lwsl_info(" mem: platform fd map: %5lu bytes\n",
- (unsigned long)(sizeof(struct lws *) * context->max_fds));
- fd = lws_open(SYSTEM_RANDOM_FILEPATH, O_RDONLY);
- context->fd_random = fd;
- if (context->fd_random < 0) {
- lwsl_err("Unable to open random device %s %d\n",
- SYSTEM_RANDOM_FILEPATH, context->fd_random);
- return 1;
- }
- #ifdef LWS_WITH_PLUGINS
- if (info->plugin_dirs && (context->options & LWS_SERVER_OPTION_LIBUV))
- lws_plat_plugins_init(context, info->plugin_dirs);
- #endif
- return 0;
- }
- int
- lws_plat_context_early_init(void)
- {
- #if !defined(LWS_AVOID_SIGPIPE_IGN)
- signal(SIGPIPE, SIG_IGN);
- #endif
- return 0;
- }
- void
- lws_plat_context_early_destroy(struct lws_context *context)
- {
- }
- void
- lws_plat_context_late_destroy(struct lws_context *context)
- {
- #ifdef LWS_WITH_PLUGINS
- if (context->plugin_list)
- lws_plat_plugins_destroy(context);
- #endif
- if (context->lws_lookup)
- lws_free(context->lws_lookup);
- if (!context->fd_random)
- lwsl_err("ZERO RANDOM FD\n");
- if (context->fd_random != LWS_INVALID_FILE)
- close(context->fd_random);
- }
|