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 uint32_t count; 22 23 uint8_t flags; 24 uint8_t read_after_accept; /* 1 bit */ 25 26 #if (NXT_TLS) 27 uint8_t tls; /* 1 bit */ 28 #endif 29 #if (NXT_INET6 && defined IPV6_V6ONLY) 30 uint8_t ipv6only; /* 2 bits */ 31 #endif 32 33 uint8_t socklen; 34 uint8_t address_length; 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(nxt_task_t *task, nxt_socket_t s, 55 int backlog); 56 57 NXT_EXPORT nxt_int_t nxt_listen_socket_create(nxt_task_t *task, nxt_mp_t *mp, 58 nxt_listen_socket_t *ls); 59 NXT_EXPORT nxt_int_t nxt_listen_socket_update(nxt_task_t *task, 60 nxt_listen_socket_t *ls, nxt_listen_socket_t *prev); 61 NXT_EXPORT void nxt_listen_socket_remote_size(nxt_listen_socket_t *ls); 62 NXT_EXPORT size_t nxt_listen_socket_pool_min_size(nxt_listen_socket_t *ls); 63 64 65 #endif /* _NXT_LISTEN_SOCKET_H_INCLUDED_ */ 66