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 uint8_t socklen; 32 uint8_t address_length; 33 } nxt_listen_socket_t; 34 35 36 #if (NXT_FREEBSD || NXT_MACOSX || NXT_OPENBSD) 37 /* 38 * A backlog is limited by system-wide sysctl kern.ipc.somaxconn. 39 * This is supported by FreeBSD 2.2, OpenBSD 2.0, and MacOSX. 40 */ 41 #define NXT_LISTEN_BACKLOG -1 42 43 #else 44 /* 45 * Linux, Solaris, and NetBSD treat negative value as 0. 46 * 511 is a safe default. 47 */ 48 #define NXT_LISTEN_BACKLOG 511 49 #endif 50 51 52 NXT_EXPORT nxt_int_t nxt_listen_socket(nxt_task_t *task, nxt_socket_t s, 53 int backlog); 54 55 NXT_EXPORT nxt_int_t nxt_listen_socket_create(nxt_task_t *task, 56 nxt_listen_socket_t *ls, nxt_bool_t bind_test); 57 NXT_EXPORT nxt_int_t nxt_listen_socket_update(nxt_task_t *task, 58 nxt_listen_socket_t *ls, nxt_listen_socket_t *prev); 59 NXT_EXPORT void nxt_listen_socket_remote_size(nxt_listen_socket_t *ls, 60 nxt_sockaddr_t *sa); 61 NXT_EXPORT size_t nxt_listen_socket_pool_min_size(nxt_listen_socket_t *ls); 62 63 64 #endif /* _NXT_LISTEN_SOCKET_H_INCLUDED_ */ 65