xref: /unit/src/nxt_listen_socket.h (revision 0:a63ceefd6ab0)
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