xref: /unit/src/nxt_listen_socket.h (revision 228:d448bb7283b2)
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 size_t nxt_listen_socket_pool_min_size(nxt_listen_socket_t *ls);
60 
61 
62 #endif /* _NXT_LISTEN_SOCKET_H_INCLUDED_ */
63