/* * libwebsockets - small server side websockets and web server implementation * * Copyright (C) 2010 - 2018 Andy Green * * 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 * * Included from lib/core/private.h if no explicit platform */ #include #include #include #include #include #include #include #include #ifndef __cplusplus #include #endif #include #include #include #include #include #include #include #include #if defined(__APPLE__) #include #endif #if defined(__FreeBSD__) #include #endif #if defined(__linux__) #include #endif #if defined(__QNX__) #include #if defined(__LITTLEENDIAN__) #define BYTE_ORDER __LITTLEENDIAN__ #define LITTLE_ENDIAN __LITTLEENDIAN__ #define BIG_ENDIAN 4321 /* to show byte order (taken from gcc); for suppres warning that BIG_ENDIAN is not defined. */ #endif #if defined(__BIGENDIAN__) #define BYTE_ORDER __BIGENDIAN__ #define LITTLE_ENDIAN 1234 /* to show byte order (taken from gcc); for suppres warning that LITTLE_ENDIAN is not defined. */ #define BIG_ENDIAN __BIGENDIAN__ #endif #endif #if defined(__sun) && defined(__GNUC__) #include #if !defined (BYTE_ORDER) #define BYTE_ORDER __BYTE_ORDER__ #endif #if !defined(LITTLE_ENDIAN) #define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__ #endif #if !defined(BIG_ENDIAN) #define BIG_ENDIAN __ORDER_BIG_ENDIAN__ #endif #endif /* sun + GNUC */ #if !defined(BYTE_ORDER) #define BYTE_ORDER __BYTE_ORDER #endif #if !defined(LITTLE_ENDIAN) #define LITTLE_ENDIAN __LITTLE_ENDIAN #endif #if !defined(BIG_ENDIAN) #define BIG_ENDIAN __BIG_ENDIAN #endif #if defined(LWS_BUILTIN_GETIFADDRS) #include "./misc/getifaddrs.h" #else #if defined(__HAIKU__) #define _BSD_SOURCE #endif #include #endif #if defined (__sun) || defined(__HAIKU__) || defined(__QNX__) #include #else #include #endif #ifdef __QNX__ # include "netinet/tcp_var.h" # define TCP_KEEPINTVL TCPCTL_KEEPINTVL # define TCP_KEEPIDLE TCPCTL_KEEPIDLE # define TCP_KEEPCNT TCPCTL_KEEPCNT #endif #define LWS_ERRNO errno #define LWS_EAGAIN EAGAIN #define LWS_EALREADY EALREADY #define LWS_EINPROGRESS EINPROGRESS #define LWS_EINTR EINTR #define LWS_EISCONN EISCONN #define LWS_ENOTCONN ENOTCONN #define LWS_EWOULDBLOCK EWOULDBLOCK #define LWS_EADDRINUSE EADDRINUSE #define lws_set_blocking_send(wsi) #define LWS_SOCK_INVALID (-1) #define wsi_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()] #define insert_wsi(A,B) assert(A->lws_lookup[B->desc.sockfd - \ lws_plat_socket_offset()] == 0); \ A->lws_lookup[B->desc.sockfd - \ lws_plat_socket_offset()] = B #define delete_from_fd(A,B) A->lws_lookup[B - lws_plat_socket_offset()] = 0 #ifndef LWS_NO_FORK #ifdef LWS_HAVE_SYS_PRCTL_H #include #endif #endif #if defined (__ANDROID__) #include #include #endif #define compatible_close(x) close(x) #define lws_plat_socket_offset() (0) /* * Mac OSX as well as iOS do not define the MSG_NOSIGNAL flag, * but happily have something equivalent in the SO_NOSIGPIPE flag. */ #ifdef __APPLE__ #define MSG_NOSIGNAL SO_NOSIGPIPE #endif /* * Solaris 11.X only supports POSIX 2001, MSG_NOSIGNAL appears in * POSIX 2008. */ #ifdef __sun #define MSG_NOSIGNAL 0 #endif