1 2 /* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7 #ifndef _NXT_LISTEN_SOCKET_H_INCLUDED_ 8 #define _NXT_LISTEN_SOCKET_H_INCLUDED_ 9 10 11 typedef struct { 12 /* nxt_socket_t is int. */ 13 nxt_socket_t socket; 14 int backlog; 15 16 nxt_work_queue_t *work_queue; 17 nxt_work_handler_t handler; 18 19 nxt_sockaddr_t *sockaddr; 20 21 uint8_t flags; 22 uint8_t read_after_accept; /* 1 bit */ 23 24 #if (NXT_SSLTLS) 25 uint8_t ssltls; /* 1 bit */ 26 #endif 27 #if (NXT_INET6 && defined IPV6_V6ONLY) 28 uint8_t ipv6only; /* 2 bits */ 29 #endif 30 31 void *servers; 32 33 socklen_t socklen; 34 uint32_t mem_pool_size; 35 } nxt_listen_socket_t; 36 37 38 #if (NXT_FREEBSD || NXT_MACOSX || NXT_OPENBSD) 39 /* 40 * A backlog is limited by system-wide sysctl kern.ipc.somaxconn. 41 * This is supported by FreeBSD 2.2, OpenBSD 2.0, and MacOSX. 42 */ 43 #define NXT_LISTEN_BACKLOG -1 44 45 #else 46 /* 47 * Linux, Solaris, and NetBSD treat negative value as 0. 48 * 511 is a safe default. 49 */ 50 #define NXT_LISTEN_BACKLOG 511 51 #endif 52 53 54 NXT_EXPORT nxt_int_t nxt_listen_socket_create(nxt_listen_socket_t *ls, 55 nxt_bool_t bind_test); 56 NXT_EXPORT nxt_int_t nxt_listen_socket_update(nxt_listen_socket_t *ls, 57 nxt_listen_socket_t *prev); 58 NXT_EXPORT size_t nxt_listen_socket_pool_min_size(nxt_listen_socket_t *ls); 59 60 61 #endif /* _NXT_LISTEN_SOCKET_H_INCLUDED_ */ 62