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